ArrayList 和 LinkedList 区别
一、数据结构
ArrayList底层是动态数组:
1 | 2 | 3 | 4 | 5 |
LinkedList底层是双向链表:
二、效率比较
2.1 插入效率:
若直接在尾部插入,依次对ArrayList和LinkedList插入一百万条记录,耗费时间如下:
若在中间随机位置插入,依次对ArrayList和LinkedList插入十万条记录,耗费时间如下:
综上:
当直接插入尾部时,ArrayList效率更好,原因为数组扩容的平均时间耗费小于链表的指针操作(每一次插入时数组不一定扩容,而每一次插入时必有指针操作);
当在中间随机位置插入时,ArrayList的效率则远远下降,因为每一次插入都伴随着大量数据的变化移动,这些移动的时间耗费要远大于指针操作。
2.2 删除效率:
根据插入效率,易得知ArrayList的删除效率低于LinkedList
2.3 查询效率:
ArrayList的底层为数组,因此查询效率为O(1)
LinkedList的底层为链表,最坏的查询效率为O(n)