关于ArrayLisy的一些疑问?

是否保证线程安全?

ArrayList LinkedList 都是不同步的,也就是不保证线程安全。
 

底层数据结构区别?

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

插⼊和删除是否受元素位置的影响?

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

是否⽀持快速随机访问?

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

内存空间占⽤?

ArrayList 的空间浪费主要体现在在 list 列表的结尾会预留⼀定的容量空间,⽽ LinkedList 的空间花费则
体现在它的每⼀个元素都需要消耗⽐ ArrayList 更多的空间(因为要存放直接后继和直接前驱以及数
据)。
发布了5 篇原创文章 · 获赞 3 · 访问量 3896

猜你喜欢

转载自blog.csdn.net/Alex_Cxl/article/details/104970616