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使用到的标记-删除算法)

相关推荐
写后端的胖头鱼18 小时前
一文详解B+树原理(附场景+示例)
数据结构·b树
daidaidaiyu20 小时前
ThingsBoard 集群的核心逻辑源码分析
java
All for pursuit.21 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
我可能是个假开发21 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong21 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
【JAVA】玩家1 天前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Wang's Blog1 天前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
xxwl5851 天前
数据结构知识点和代码实现总结(C语言实现)
c语言·开发语言·数据结构
MandalaO_O1 天前
IDEA 开发(快捷键 + 调试 + 序列化)
java·ide·intellij-idea
xiaoqiMikko1 天前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm