ArrayList和LinkedList的区别

首先,ArrayList的底层数据结构是一个动态扩容的数组,LinkedList的底层数据结构是一个双向链表。

其次,由于ArrayList的底层是一个数组,由于有下标索引,所以ArrayList支持数据的随机访问,其时间复杂度为O(1),而LinkedList底层是一个链表,当我们想要随机访问某一个元素时,只能通过遍历整个链表的形式来查询对应的元素,其时间复杂度为O(N),所以,在需要大量、频繁随机读取元素的场景中,ArrayList是更合适的选择

然后,就是数据的插入和删除这块,头插和头删这块,由于LinkedList的底层是一个双向链表,此时只需要调整头指针即可,时间复杂度为O(1),由于ArrayList的头插涉及到数据的迁移,其头插的效率是不如LinkedList的

尾插情况下,如果尾插时ArrayList没有扩容操作,此时只需在对应的位置插入数据即可,但是尾插时如果触发的扩容操作,此时涉及到数组复制的操作,效率就会变低,而LinkedList尾插时只需要调整尾指针即可

然后就是尾删的情况,尾删的情况下,ArrayList和LinkedList的效率是差不多的

但是由此可见,LinkedList适合用户数据的频繁的删除和插入的场景下使用

相关推荐
小石头 100862 小时前
【数据结构】哈希表
数据结构·哈希算法·哈希表
0 0 02 小时前
CCF-CSP 36-2 梦境巡查(dream)【C++】考点:前缀和
开发语言·c++·算法
fengxin_rou2 小时前
redis主从和集群一致性、哨兵机制详解
java·开发语言·数据库·redis·缓存
Olafur_zbj2 小时前
【AI】LLM上下文拼接
java·开发语言·spring·llm·context
对酒当歌丶人生几何2 小时前
Spring异步体系与事务一致性实战指南
java·spring·eventlistener
leo__5202 小时前
基于C#与HALCON开发的完整视觉检测系统案例
开发语言·c#·视觉检测
这也能行2 小时前
Tomcat
java·tomcat
小杍随笔2 小时前
【Rust中所有符号的作用及使用场景详解】
java·算法·rust
亚马逊云开发者2 小时前
别再烧 Token 了!我用这 5 个配置把 OpenClaw 费用砍了一半
java