是否保证线程安全?
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
更多的空间(因为要存放直接后继和直接前驱以及数
据)。