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。