Java面试题:ArrayList和LinkedList的区别

67 阅读1分钟

ArrayList增删慢、查询快,LinkedList增删快、查询慢这种说法其实是不太准确的。ArrayList和LinkedList的快慢是分场景的。

ArrayList

  • 底层基于动态数组,需要连续存储,所以随机访问快(指定下标访问)
  • ArrayList尾部插入快,而其他部分的插入和删除数据因为要移动数据,所以性能会很低
  • ArrayList可以利用CPU缓存,局部性原理

LinkedList

  • 底层基于双向链表,无需连续内存,所以随机访问性能慢(要沿着链表遍历访问)
  • 头部和尾部插入性能高,还有删除性能也高
  • 但由于每个节点要存储自身数据外,还有存储两个引用分别指向前一个元素和后一个元素,所以占用内存多。