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 分钟前
leetcode239 滑动窗口最大值
数据结构·c++·算法·leetcode·哈希算法
z落落2 分钟前
C# 虚方法(virtual)与抽象方法 +区别+new方法隐藏 & override方法重写
java·开发语言·c#
luoganttcc3 分钟前
FP16 和 BF16 的数学表达
算法
宋哥转AI3 分钟前
Spring AI Graph:从0到Supervisor(二)并行执行+HITL实战
java·agent
玖釉-5 分钟前
Vulkan 示例解析:pipelines.cpp 如何在一个 Render Pass 中切换多条 Graphics Pipeline
c++·windows·算法·图形渲染
plainGeekDev5 分钟前
XML 布局 → Compose 声明式 UI
android·java·kotlin
ji1985944312 分钟前
局部线性嵌入(LLE)算法 MATLAB 实现
算法·机器学习·matlab
浮游本尊16 分钟前
项目全景 + 第一条完整后端链路
java·前端
jeffer_liu16 分钟前
Spring AI 生产级实战:模型选择
java·人工智能·spring boot·后端·spring·语言模型·ai编程
User_芊芊君子17 分钟前
【JavaEE】线程入门:线程基础 + 安全机制一次讲透
java·安全·java-ee