ArrayList增删慢、查询快,LinkedList增删快、查询慢这种说法其实是不太准确的。ArrayList和LinkedList的快慢是分场景的。
ArrayList
- 底层基于动态数组,需要连续存储,所以随机访问快(指定下标访问)
- ArrayList尾部插入快,而其他部分的插入和删除数据因为要移动数据,所以性能会很低
- ArrayList可以利用CPU缓存,局部性原理
LinkedList
- 底层基于双向链表,无需连续内存,所以随机访问性能慢(要沿着链表遍历访问)
- 头部和尾部插入性能高,还有删除性能也高
- 但由于每个节点要存储自身数据外,还有存储两个引用分别指向前一个元素和后一个元素,所以占用内存多。