ArrayList和LinkedList的区别

作者: imule 分类: Java知识 发布时间: 2023-02-01 15:05

1、ArrayList和LinkedList两者性能上的差别

1)ArrayList基于数组实现,LinkedList基于链表实现;

2)一般认为基于数组实现,增删慢,查找快;基于链表实现,增删快,查找慢。其实这个说法不够准确。

在指定位置插入新数据时,LinkedList因为是双向链表,新增某个节点后,只需要修改指针指向即可,所以在哪个位置插入新节点,效率都是一样的。

而ArrayList在新插入数据后,要对后续所有元素批量拷贝,也就是要重新调整队伍,所以在数据结构前段和数据结构后段,或者在数据结构末尾,由于涉及的元素在数量越来越少,所以执行效率上是不同的。

在ArrayList的末尾插入新数据,其实只是在指定位置上赋值即可。但是LinkedList则需要创建Node对象,且要建立前后节点的关联 ,当对象越大时,执行效率是降低。

至于删除元素。LinkedList在删除元素后,要重新指向指针,而如果在ArrayList末位删除元素,则仅仅将元素弹出而已。

综上说述,ArrayList增删一定慢于LinkedList吗?答案很清晰了,未必如此,要分情况。

要说明的是,LinkedList整体插入、删除的执行效率比较稳定,没有ArrayList这种越往后越快的情况;此外,插入元素的时候,如果空间不足,ArrayList会进行自动扩容,ArrayList底层数组扩容是一个既消耗时又消耗空间的操作,遇到需要扩容的情况,ArrayList新增元素的执行效率一定是低于LinkedList的。

实际开发中怎么选择是使用ArrayList还是LinkedList呢?

当数据结构需要频繁插入和删除元素,那么选择LinkedList;当数据结构需要频繁查找元素,那么选择ArrayList;如果不确定到底增删多还是查询多,那么建议使用LinkedList。

3)替换指定位置的元素时,ArrayList比LinkedList更快。

ArrayList:数组[index] = elelement 就可以了,非常的快。

LinkedList:需要先找到inde位置的元素,然后再调整指针的指向。

因此,替换元素时,ArrayList比LinkedList更快。

2、ArrayList和LinkedList在遍历方式的选择上不同

1)遍历ArrayList推荐使用for循环。

遍历ArrayList可以使用for循环,也可以使用foreach循环。如果使用foreach,当数据量增多时,耗时会有微弱增加。其实两种遍历方式在效率上没有明显差异,只不过数据量越大,遍历ArrayList使用for循环会更快。

但是foreach代码简洁美观,相对于下标循环而言的,foreach不必关心下标初始值和终止值及越界等,所以不易出错。如果考虑foreach的代码优点,遍历ArrayList也可选用foreach。

2)遍历LinkedList推荐使用foreach循环。

遍历LinkedList推荐使用foreach循环,如果使用for循环,则效率会降低,当数据量越大时,耗时会大幅增加。

寄语

    有人在奔跑,有人在睡觉,有人在感恩,有人在抱怨,有目标的睡不着,没目标的睡不醒,努力才是人生应有的态度,睁开眼就是新的开始。

本站文章主要用于个人学习记录,可能对您有所帮助,仅供参考!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!