ArrayList和LinkedList的效率 详解

本文详细探讨了ArrayList和LinkedList在头部、中间和尾部增删操作下的效率差异,特别强调了链表的随机访问低效和内存消耗问题。同时,针对大数据量和不同场景下的优劣势进行了深入分析。

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

ArrayList和LinkedList的增删效率可以分为三种情况:在头部增删,在中间增删和在尾部增删;
当头部增删时:
LinkedList的效率是要优于ArrayList的,因为ArrayList要进行大量的数据迁移;
在中间增删时:
LinkedList的效率要低于Arraylist的,因为Linked在从头部头部或者尾部遍历找到对应的节点,而ArrayList迁移的数据就比较少了;
在尾部增删时:
1.当数据量较少时,两种的效率都很高,只需要在尾部添加元素即可;
2.当添加的元素有一定规模时,LinkedList的效率要高于ArrayList,因为ArrayList要频繁的扩容,复制数据,耗费时间;
3.当添加的元素非常大时,ArrayList的效率就要高于LinkedList,因为随着ArrayList的长度的增加,其扩容的次数会大大降低;ArrayList只需要一个简单的赋值就完成了; 而LinkedList需要不断地分配内存空间再进行赋值,本身效率就低于ArrayList的;
链表结构的缺点:
链表是非连续空间,随机访问效率低,访问的时候不能充分的使用CPU cache,每次插入节点和删除节点是很浪费内存的,内部节点都可以LinkedList进行垃圾收集,这在幕后需要做更多工作。此外,由于链表节点被分配在这里和那里,CPU 缓存的使用不会提供太多好处。

参考文档:
ArrayList和LinkedLIst的效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值