ArrayList 和 LinkList 的区别

ArrayList(数组结构):

优点:get 和 set 调用花费常数时间,也就是查询的速度快; 
缺点:新项的插入和现有项的删除代价昂贵,也就是添加删除的速度慢

LinkedList(链表结构):

优点:新项的插入和和现有项的删除开销很小,即添加和删除的速度快 
缺点:对 get 和 set 的调用花费昂贵,不适合做查询

面试中经常问到一些深入的东西,比如:

•1. 是否保证线程安全
ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
• 2. 底层数据结构

Arraylist 底层使用的是 Object 数组;LinkedList 底层使用的是双向循环链表数据 结构;

• 3.插入和删除是否受元素位置的影响:

①	ArrayList 采用数组存储,所以插入和删除元素的时间复 杂度受元素位置的影响。
	比如:执行 add(E e)方法的时候, ArrayList 会默认在将指定的元素追加到此 列表的末尾,
	这种情况时间复杂度就是 0(1)。
	但是如果要在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i)。			 
	因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i) 个元素都要执行向后位/向前移一位的操作。 
②	LinkedList 采用链表存储,所以插入,删除元素时间复杂 度不受元素位置的影响,
都是近似0(1)而数组为近似 0(n)。

•4. 是 否 支 持 快 速 随 机 访 问

LinkedList 不 支 持 高 效 的 随 机 元 素 访 问 , 而 ArrayList 实 现 了 RandmoAccess 接口,
所以有随机访问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于 get(int index)方法)。

•5. 内存空间占用

ArrayList 的空 间浪费主要体现在在 list 列表的结尾会预留一定的容量空间,
而 LinkedList 的空间花费则体现在它的每一个元素都需要消耗比 ArrayList 更多的空间
(因为要存放直接后继 和直接前驱以及数据)。

猜你喜欢

转载自blog.csdn.net/qq_42795915/article/details/84193238