ArrayList 和 LinkedList 的区别?
发布于
一、底层结构
- ArrayList:基于动态数组,连续内存存储。
- LinkedList:基于双向链表,节点分散存储。
二、性能对比
| 操作 | ArrayList | LinkedList |
|---|---|---|
| 随机访问 | O(1) | O(n) |
| 尾部追加 | O(1)(均摊) | O(1) |
| 中间插入/删除 | O(n)(需移动元素) | O(1)(定位后) |
| 内存占用 | 紧凑,有扩容浪费 | 每个节点额外存前后指针 |
三、使用场景
- 查多改少、需要随机访问 → ArrayList。
- 频繁在头部/中间增删 → LinkedList。
- 实际开发中 ArrayList 占绝大多数,除非明确需要链表特性。
四、扩容机制
ArrayList 默认初始容量 10,扩容时新容量 = 旧容量 × 1.5,数组拷贝用 Arrays.copyOf。