news 2026/5/23 20:21:20

ArrayList 和 LinkedList 的区别是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ArrayList 和 LinkedList 的区别是什么?

在Java集合框架中,ArrayListLinkedList都是List接口的实现类,但底层数据结构和操作效率存在显著差异:


1. 底层数据结构

  • ArrayList
    基于动态数组实现。初始容量为10,当元素超出容量时,自动扩容至原容量的1.5倍(例如:newCapacity = oldCapacity + (oldCapacity >> 1))。

  • LinkedList
    基于双向链表实现。每个节点(Node)包含数据域和两个指针: $$ \text{Node} = { \text{prev}, \text{element}, \text{next} } $$


2. 操作效率对比

随机访问(Get/Set)
  • ArrayList:$O(1)$
    通过索引直接定位数组位置,例如:array[index]
  • LinkedList:$O(n)$
    需遍历链表,最坏情况下需扫描半个链表(平均时间复杂度为 $n/2$)。
插入与删除(Add/Remove)
  • ArrayList
    • 尾部操作:$O(1)$(扩容时除外)
    • 中间操作:$O(n)$,需移动后续元素(例如:删除索引 $i$ 的元素需移动 $n-i-1$ 个元素)。
  • LinkedList
    • 任意位置操作:$O(1)$,仅需修改相邻节点的指针(但需 $O(n)$ 时间定位位置)。

3. 内存占用

  • ArrayList
    仅需存储元素和数组容量,内存连续。
  • LinkedList
    每个元素需额外存储两个指针(每个指针占4~8字节),内存非连续,空间开销更大。

4. 适用场景

  • ArrayList
    适合频繁随机访问(如按索引查询)、尾部插入/删除操作。
  • LinkedList
    适合频繁在任意位置插入/删除(如实现栈、队列或频繁修改的列表)。

代码示例

// ArrayList 尾部插入高效 ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(1); // O(1) // LinkedList 中间插入高效 LinkedList<Integer> linkedList = new LinkedList<>(); linkedList.add(0, 1); // O(1) 若已知位置

小结

特性ArrayListLinkedList
随机访问$O(1)$$O(n)$
头部插入/删除$O(n)$$O(1)$
尾部插入/删除$O(1)$(均摊)$O(1)$
中间插入/删除$O(n)$$O(n)$(定位)+ $O(1)$(操作)
内存占用更低更高(指针开销)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 12:49:46

八股篇(1):LocalThread、CAS和AQS

八股篇&#xff08;1&#xff09;&#xff1a;LocalThread、CAS和AQS ThreadLocal ThreadLocal 的作用 线程隔离&#xff1a;ThreadLocal 为每个线程提供了独立的变量副本&#xff0c;这意味着线程之间不会互相影响&#xff0c;可以安全地在多线程环境中使用这些变量。降低耦合…

作者头像 李华
网站建设 2026/5/20 16:55:17

【粉丝福利社】分布式系统性能优化:方法与实践

&#x1f48e;【行业认证权威头衔】 ✔ 华为云天团核心成员&#xff1a;特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯&#xff1a;CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋&am…

作者头像 李华
网站建设 2026/5/23 15:09:43

基于PID优化和矢量控制装置的四旋翼无人机附MatlabSimulink

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿真…

作者头像 李华
网站建设 2026/5/4 18:56:42

《国产操作系统》学习心得:DM数据库在国产系统上的实战应用

前言在数字化转型与自主可控战略深化的背景下&#xff0c;麒麟、统信等国产操作系统已广泛应用于政府、金融、能源等关键领域&#xff0c;而“国产操作系统国产数据库”的协同架构&#xff0c;是构建自主可控IT体系的核心支撑。达梦DM8作为国内主流的自主研发数据库&#xff0c…

作者头像 李华
网站建设 2026/5/1 6:56:26

学长亲荐10个AI论文工具,本科生搞定毕业论文不求人!

学长亲荐10个AI论文工具&#xff0c;本科生搞定毕业论文不求人&#xff01; AI 工具如何让论文写作变得轻松高效&#xff1f; 在当今学术环境中&#xff0c;越来越多的本科生开始借助 AI 工具来辅助论文写作。这些工具不仅能显著降低 AIGC&#xff08;人工智能生成内容&#xf…

作者头像 李华