ArrayList 和 LinkedList 区别

ArrayList:基于数组实现;

在这里插入图片描述

LinkedList:基于双向链表实现;使用 Node 存储链表节点信息;

在这里插入图片描述
ArrayList 和 LinkedList 都实现了 List 接口,且两者都是线程不安全的

区别

  1. ArrayList 使用动态数组存储元素,而 LinkedList 使用双向链表来存储元素。

  2. 对于随机访问,ArrayList要优于LinkedList; 对于插入和删除操作,LinkedList优于ArrayList。

  3. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

  4. ArrayList 只能用作列表;LinkedList 可以用作列表或者队列,因为它还实现了 Deque 接口。

    在查询时,ArrayList 直接根据下标获取,和数组的长度无关,查询速度快;而LinkedList 则需要从头节点开始遍历,下标小于链表长度的一半时,从前往后遍历;否则从后往前遍历,查询速度慢。

    在增加时,ArrayList 将新的元素添加的指定的位置时,会将插入位置后的元素依次向后复制,添加速度慢;而 LinkedList 则是可以直接加入进去,先用 n 记录 p.next ,然后 p.next = newNode ,再把 newNode.next = n;这样就实现了添加,而且速度更快。

    在删除时,ArrayList 会将指定位置后的元素依次向前复制,删除速度也慢;而 LinkedList 则是将原来的 p.next 变为了p.next.next,就实现了删除,而且速度更快。
    在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值