ArrayList、vector、LinkedList的区别你真的知道吗?

对ArrayList和LinkedList写了个简易的中文注解版本的:https://github.com/jiaojianpeng/list/

ArrayList:

1.底层是数组。

2.查询遍历快。

  根据下标进行取值。

3.添加慢。

    添加时需要进行扩容,默认数组长度为10,扩容每次扩容1.5倍(扩容计算公式:旧的容量+(旧的容量 >> 1))。

    如果知道要添加多少元素,指定集合大小效率会提高。

4.删除慢。

    根据下标删除时,需要移动后面的所有元素。通过arraycopy(Object src, int srcPos, Object dest, int destPos,int length);方法来实现移动数据。arraycopy 详情:https://blog.csdn.net/jiao1902676909/article/details/89363608

Vector:

和Arraylist底层实现一样,不过所有的方法都是线程安全的,通过synchronized关键字进行修饰。

扩容机制不同,arrayList每次扩容1.5倍,Vector每次扩容2倍。

LinkedList:

1.底层是双向链表。

2.查询慢。

    查询需要根据头节点first或者尾结点last来进行遍历。

    计算方式:判断   (下标  < (size >> 1))

                    如果有30条数据,要查询第14条,那么要从第一条开始查询,一直查询到下标为14的数据。

                    如果要查询第16条数据。那么要从最后一条进行往前查询,直到查询到下标为16的数据。

3.添加快。

   不需要扩容。

4.删除快。

     不需要移动数据。只需要把要当前要删除的节点的next指向下一个节点,把要删除的节点的prve指向上一个节点。

      如果当前要删除的节点的下一个节点为null,说明是最后一条数据,则把next指向null。

      如果当前要删除的节点的上个节点为null,说明是第一条数据,也就是下标为0,则把prve指向null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值