ArrayList和LinkedList的区别

  1. 底层数据结构
  • ArrayList 是动态数组的数据结构实现。

  • LinkedList 是双向链表的数据结构实现。

  1. 操作数据效率
  • ArrayList按照下标查询的时间复杂度O(1)【内存是连续的,根据寻址公式】, LinkedList不支持下标查询。

  • 查找(未知索引): ArrayList需要遍历,链表也需要链表,时间复杂度都是O(n)。

  • 新增和删除

    • ArrayList尾部插入和删除,时间复杂度是O(1);其他部分增删需要挪动数组,时间复杂度是O(n)。

    • LinkedList头尾节点增删时间复杂度是O(1),其他都需要遍历链表,时间复杂度是O(n)。

  1. 内存空间占用
  • ArrayList底层是数组,内存连续,节省内存。

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

  1. 线程安全
  • ArrayList和LinkedList都不是线程安全的。

  • 如果需要保证线程安全,有两种方案:

    • 在方法内使用,局部变量则是线程安全的。

    • 使用线程安全的ArrayList和LinkedList。

相关推荐
圈圈编码1 分钟前
WebSocket
java·网络·spring boot·websocket·网络协议·spring
szuaudi3 分钟前
SpringMVC实现text/event-stream(SSE)
java·spring
nlog3n25 分钟前
Java 桥接模式 详解
java·开发语言·桥接模式
理想奋斗中29 分钟前
【并发编程 | 第五篇】探索ThreadLocal的原理
java·多线程·threadlocal·threadlocalmap
PownShanYu31 分钟前
RainbowDash 的 Robot
算法
李小白6632 分钟前
JavaEE初阶复习(JVM篇)
java·jvm·java-ee
Easonmax42 分钟前
【JavaEE】网络原理详解
java·java-ee
Phoebe鑫1 小时前
数据结构每日一题day11(链表)★★★★★
数据结构·算法
java_学习爱好者1 小时前
SpringBoot配置文件多环境开发
java
别来无恙✲1 小时前
SpringBoot启动方法分析
java·springboot·场景设计