ArrayList效率分析与LinkedList性能对比

一、ArrayList

1.数据结构

数组 -> 顺序表。

2.插入数据

在数组中间插入数据,其后的数据都会往后copy,时间复杂度为O(n)。

3.删除数据

与插入类似,同样涉及数据的copy,时间复杂度为O(n)。

4.查找元素

通过下标查找元素,非常快,时间复杂度为O(1)。

二、LinkedList

1.数据结构

链表。

2.插入数据

指定位置上断开链表,插入新元素,重新连接成链表,时间复杂度为O(1)。

3.删除元素

指定位置上断开链表,删除元素,重新连接成链表,时间复杂度为O(1)。

4.查找元素

遍历链表查找指定元素,时间复杂度为O(n)。

三、对比

插入和删除效率,LinkedList更快。

查找效率,ArrayList更快。

四、思考

1.如果一个数组要反复插入删除,怎么优化降低时间复杂度?

当删除元素时,并不是真正删除元素,而是将删除的位置标记为null或其他标记,当内部不足时,使用for循环遍历数据,删除被标记为null的元素。(JVM使用到的标记-删除算法)

相关推荐
yaoxin52112317 小时前
279. Java Stream API - Stream 拼接的两种方式:concat() vs flatMap()
java·开发语言
@小码农17 小时前
202512 电子学会 Scratch图形化编程等级考试三级真题(附答案)
服务器·开发语言·数据结构·数据库·算法
坚持学习前端日记17 小时前
2025年的个人和学习年度总结以及未来期望
java·学习·程序人生·职场和发展·创业创新
Cosmoshhhyyy17 小时前
《Effective Java》解读第29条:优先考虑泛型
java·开发语言
Chen不旧17 小时前
java基于reentrantlock/condition/queue实现阻塞队列
java·开发语言·signal·reentrantlock·await·condition
寒水馨18 小时前
com.github.oshi : oshi-core 中文文档(中英对照·API·接口·操作手册·全版本)以6.4.0为例,含Maven依赖、jar包、源码
java·后端
0和1的舞者18 小时前
SpringBoot日志框架全解析
java·学习·springboot·日志·打印·lombok
小毅&Nora18 小时前
【Java线程安全实战】② ConcurrentHashMap 源码深度拆解:如何做到高性能并发?
java·安全·多线程
Knight_AL18 小时前
阿里《Java 开发手册》下的对象构建与赋值规范实践
java·开发语言
步步为营DotNet18 小时前
深入理解.NET 中的IHostedService:后台任务管理的基石
java·网络·.net