ArrayList vs LinkedList

§2.3.3 ArrayList vs LinkedList

考察意图:是否理解List不同实现的性能差异及工程选型判断。

回答样板

维度ArrayListLinkedList
底层结构动态数组(Object[])双向链表(Node)
随机访问O(1)O(n)——需要遍历
尾部插入O(1)均摊(扩容时O(n))O(1)
头/中间插入O(n)(需要移动元素)头O(1),中间O(n)——定位+O(1)插入
内存开销连续内存,数据紧凑每个节点额外存储prev+next指针

工程实践:实际开发中ArrayList用得更多。原因是内存连续、CPU缓存友好(缓存行预读),大多数场景下遍历性能远超LinkedList。LinkedList的优势场景是频繁头尾插入删除(如队列、栈)。日常开发90%场景ArrayList够用。

ArrayList扩容:默认初始容量10,扩容时增长为原来的1.5倍(oldCapacity + (oldCapacity >> 1)),通过Arrays.copyOf拷贝数组。

陷阱提示:不知道ArrayList扩容机制细节;说"LinkedList插入快"不考虑定位开销。

本作品采用 CC BY-NC-SA 4.0 协议进行许可
使用 Hugo 构建
主题 StackJimmy 设计