ArrayList和LinkedList的区别
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循环,则效率会降低,当数据量越大时,耗时会大幅增加。
本站文章主要用于个人学习记录,可能对您有所帮助,仅供参考!

