ArrayList与LinkedList的区别

1.底层实现不同

ArrayList底层是动态数组实现的。

LinkedList底层是双向链表实现的。

2.操作数据的效率

ArrayList可以按照下标查询,时间复杂度为O(1)。而LinkedList不支持下标查询。

查找的话二者都是需要遍历的,所以时间复杂度都是O(n)。

新增和删除:

ArrayList头尾插入和删除都是O(1),对于其他部位修改都需要移动数组所以是O(n)。

LinkedList头尾也是O(1),其他部位插入和删除需要遍历链表,所以O(n)。

3.内存空间占用

ArrayList底层是数组,内存连续,省空间。

LinkedList底层是双向链表,需要存储一个数据两个指针,更占用内存。

4.线程安全

两者都不是线程安全的。

如何保证线程安全:

在方法内使用局部变量。(因为局部变量是存放在栈帧里的,每个线程有一个栈,他们是线程不共享的)

使用线程安全的ArrayList和LinkedList。

相关推荐
呃呃本5 分钟前
算法题(栈)
算法
通信小呆呆12 分钟前
基于 ADMM-MFOCUSS 的捷变频雷达扩展目标稀疏重构原理
算法·重构·信息与通信·信号处理·雷达
largecode19 分钟前
如何让电话显示店名?来电显示店铺名称,提升有效接通率
java·开发语言·spring·百度·学习方法·业界资讯·twitter
xuhaoyu_cpp_java19 分钟前
SpringMVC学习(五)
java·开发语言·经验分享·笔记·学习·spring
Aurorar0rua20 分钟前
CS50 x 2024 Notes C -11
c语言·开发语言·学习方法
Dlrb121121 分钟前
C语言-指针
c语言·开发语言
橙淮22 分钟前
Java数组与链表:特性对比与应用场景
数据结构·算法
炽烈小老头24 分钟前
【每天学习一点算法 2026/05/15】被围绕的区域
学习·算法·深度优先
芜湖xin26 分钟前
【题解-洛谷】P1012 [NOIP 1998 提高组] 拼数
算法·贪心
计算机安禾30 分钟前
【c++面向对象编程】第22篇:输入输出运算符重载:<< 与 >> 的友元实现
java·前端·c++