- 1.是否线程安全
ArrayList和LinkedList都是不同步的,即不保证线程安全。
- 2.底层数据结构
ArrayList底层使用动态数组,LinkedList底层使用双向链表
- 3.查找,插入和删除元素是否受位置影响
ArrayList:
1)因为底层是数组,查找元素的时候,只要给出要查询元素的索引,就可以直接查询出来。
2)插入和删除元素的时候,如果要插入和删除第i个位置的元素,则很耗时。
3)时间复杂度近似O(n)
LinkedList:
1)插入和删除元素的时候,因为是双向指针,所以不受位置的影响。
2)时间复杂度近似O(1)
- 4.是否支持快速访问
ArrayList支持快速访问(RandomAccess接口),LinkedList不支持。
ArrayList使用for循环的方式获取数据会优于用迭代器获取数据
关于快速访问,看这个:https://www.cnblogs.com/yeya/p/9950723.html
(注:
ArrayList:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
LinkedList:
public class LinkedList<E> extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable)
- 5.内存空间占用
ArrayList:在list列表的结尾会预留一部分空间(因为是数组)。
LinkedList:因为是双向链表,有前驱和后继,所以LinkedList中每个元素比ArrayList中每个元素要多出前驱和后继的空间。