ArrayList和LinkedList

  • 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中每个元素要多出前驱和后继的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值