用自己的话总结arrayList与LinkedList

arrayList是动态改变长度的数组;为什么说可以动态改变长度,就是因为代码内部有个方法,一旦数组空间不够就会调用函数增加空间,扩大的空间的size一般是50%,所以这种预留空间的做法虽然使数组变成动态但是最终将会有很大的空间被浪费掉。数组基于索引,所以随机访问get、set方法,效率高(基于索引,也就是下标)。LinkedList基于指针(查找之前遍历指针造成一定的时间复杂度)
LinkedList是双向链表;意思是存在一个内部类用于存储每个元素的相关信息,定义如下:

private static class Entry {   
         Object element;   
         Entry next;   
         Entry previous;   
     }   

显而易见,空间浪费主要在于它的每一个元素都需要消耗相当的空间,但是对于开头和中间部分的增删,LinkedList链表效率高(基于指针),arrayList效率低(基于数组中每一个元素的搬动,类似遍历)。对于末尾的删除和增加,两者效率差不多。
没有代码验证,纯属自己总结,所以存在不足,
接下来摘抄一段总结:

1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。
2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
3.LinkedList不支持高效的随机元素访问。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

发布了13 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_37199669/article/details/78557924