ArrayList和LinkedList的区别简述(简洁、齐全)

本文对比了ArrayList和LinkedList在数据结构、使用场景、效率、内存占用以及额外功能上的差异,指出在大数据量且频繁插入/删除尾部时,LinkedList的性能优势可能减弱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据结构不同。

  • ArrayList是一个基于Array的动态数组,可以动态扩容,元素存储空间连续;
  • 而LinkedList是一个双向链表,每个数据单元包括两个前后驱指针prev、next和放置数据元素的数据单元item,元素存储地址零散。

2、使用场景不同。

  • ArrayList存储内存空间是连续的,适用于存储大量数据元素,并能高效的根据下标进行随机访问(查多改少)的情景,是最常用的列表;
  • 而LinkedList适合经常插入和删除而查询操作少(查少改多)、存储数据量较小的情景。

3、效率不同。

  • ArrayList随机访问的效率相比较高,时间复杂度O(1), 而插入和删除因为可能涉及元素移动, 相比效率较慢;
  • 而LinkedList插入和删除的速度较快,只需知道要删除元素指针就能很快删除, 开销集中在遍历查找元素指针位置, 没有元素移动开销大。

思考: ArrayList一定没有LinkedList删除插入的操作快嘛?

在海数据量情况下如百万级别,插入/修改在表中的位置不同,尤其是约靠近尾部进行删除插入,LinkedList的优势就可能会消失。
原因是海量数据下, 两者移动元素和遍历指针的量级都为O(n),且查询效率略快于移动元素,这要是修改的元素位于中部或者尾部,使得移动的次数比较少、而遍历查找的次数比较多,那LinkedList就没ArrayList快了)

4、占用内存大小不同。

  • LinkedList每个节点因为不止要存储数据,还有两个前驱和后驱指针,内存相对占比较大。(ArrayList的空间浪费体现在列表末尾的空间预留,但内存占比相比没那么大)

5、其他的不同

  • LinkedList还额外实现了Deque接口,可以实例化作为一个双向队列使用;
  • LinkedList和ArrayList类中的操作方法有些许不同等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值