ArrayList和LinkedList的区别

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

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

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

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

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

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

相关推荐
Rust研习社8 小时前
Rust Pin 解析:核心原理与异步编程实践
开发语言·后端·rust
book123_0_998 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
Drone_xjw8 小时前
解决 Qt 程序在 Kylin(麒麟)系统下表头“白屏”的问题
开发语言·qt·kylin
NCIN EXPE8 小时前
使用Springboot + netty 打造聊天服务(一)
java·spring boot·后端
运维行者_8 小时前
通过OpManager的Windows服务监控能力释放最佳IT网络性能
服务器·开发语言·网络·windows·web安全·php
.千余8 小时前
【Linux】进程概念
linux·服务器·开发语言·学习
爱学习的小囧8 小时前
ESXi性能历史怎么监控?2种方法,图形化+命令行全覆盖
java·linux·运维·服务器·网络·esxi·esxi8.0
逻辑驱动的ken8 小时前
Java高频面试考点场景题11
java·深度学习·面试·职场和发展·高效学习
码界筑梦坊8 小时前
94-基于Python的商品物流数据可视化分析系统
开发语言·python·mysql·信息可视化·数据分析·毕业设计·fastapi
学习3人组8 小时前
面向对象编程:反射(Reflection)原理与应用详解
java