LinkedList
底层是双向链表
- 基于双向链表,无需连续内存
- 随机访问慢(要沿着链表遍历)
- 头尾插入删除性能高
- 占用内存多
ArrayList
底层是数组
5. 基于数组,需要连续内存
6. 随机访问快(指根据下标访问)
7. 尾部插入、删除性能可以,其它部分插入、删除都会移动数据,因此性能会低
8. 可以利用 cpu 缓存,局部性原理
要注意LinkedList随机增删效率也不是特别高的,因为你要随机增删一定是要遍历找到这个元素的,这个遍历也是需要时间的。数组的话就是不但要找到元素而且要删除后还要移动其他的元元素。
ArrayList尾部插入性能甚至超过了LinkedList,中间插入也不比LinkedList差。只是头部插入可能性能比较低,所以实际开发中ArrayList比LinkedList用得多。
由于局部性原理,LinkedList会占用大量的内存空间。