ArrayList和LinkedList都是实现List接口的实现类。
区别:
- ArrayList底层是使用数组存储数据,是基于动态数组的数据结构;LinkedList则是基于链表的数据结构。
这里的动态数组意思是说 “小数组换大数组,然后进行数组拷贝”,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。 - 对于数据查询,ArrayList在性能上要优于LinkedList。因为ArrayList是数组,在查询数据时只需按照数组下标便可查到,时间复杂度为O(1);而LinkedList是链表,查询数据需要移动指针从前往后遍历,时间复杂度是O(n)。
- 对于新增和删除数据,LinkedList要比ArrayList占优势。
(1)对于插入操作,ArrayList需要移动数据,在空间不足的情况下,还需要重新申请空间,并拷贝整个数组;而LinkedList只需要申请一个节点,修改一下指针指向。
(2)对于删除操作,ArrayList分两种删除,一种是删除某个位置的元素,例如数组a中要删除a[2]这个元素,这个可以直接定位到a[2],但删除完成后要重新排列好剩下的元素,也需要移动数据,另一种是删除某个元素,比如要删除数组中的’5’这个元素,这时要先遍历数组找到这个元素;而LinkedList在删除的时候,只需要查找要删除的节点并操作指针,在最坏的情况下,大不了从前往后遍历一次链表。
.

本文深入对比了ArrayList和LinkedList这两种List接口实现类的区别。ArrayList基于动态数组,适合查询操作,时间复杂度为O(1);而LinkedList基于链表,新增和删除数据更优,但查询效率较低。文章详细解析了两种数据结构在不同操作场景下的性能表现。
2336

被折叠的 条评论
为什么被折叠?



