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。

相关推荐
pnoker3 分钟前
拆解 IoT DC3:六层微服务架构
java·物联网·spring cloud·微服务·架构
cfm_29149 分钟前
ThreadLocal 内存泄漏
java·jvm
我的xiaodoujiao11 分钟前
Django 基础知识详细图文教程 4-Django 视图定义与使用
开发语言·数据库·后端·测试工具·django·sqlite
l1t11 分钟前
DeepSeek总结的DuckDB在 CI 中为 release 和 glibc CLI 构建启用 LTO - #24225
开发语言·数据库·ci/cd·duckdb
whitelbwwww13 分钟前
c++运行RKNN
开发语言·c++
NJCloud14 分钟前
Docker 镜像管理:分层结构、构建优化与最佳实践
java·docker·容器
2601_9620702320 分钟前
差异基因富集分析(R语言——GO&KEGG&GSEA)
开发语言·golang·r语言
布莱克60522 分钟前
栈(Stack)详解:定义、作用、应用场景及与队列的区别(附 C/C++ 代码)
c语言·开发语言·c++·
vipxieliang22 分钟前
收货地址验证完整方案:省市区与详细地址
java·spring boot
zmzb010323 分钟前
C++课后习题训练记录Day203
开发语言·c++