当前位置: 首页 > news >正文

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)$(操作)
内存占用更低更高(指针开销)
http://www.jsqmd.com/news/145314/

相关文章:

  • 检测重复率超30%怎么破?五大实用技巧立竿见影
  • 学术写作效率优化:主流工具功能解析与实战示范
  • SCTimer/PWM定时器(续三)
  • 计算机Java毕设实战-基于JAVA的无人机销售平台的设计与实现基于Spring Boot+vue的无人机销售平台的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 父母注意!孩子近视会影响高考志愿填报这些专业
  • 初识:函数文档注释
  • 计算机Java毕设实战-基于java的校园闲置物品交易平台设计与实现基于java的校园二手交易市场系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 嵌入式知识篇---电阻、电容、电感的数量级
  • 怎么理解削峰填谷?
  • 从0到1做智能知识库:AI应用架构师的项目规划模板(可直接用)
  • 【电机控制】基于降阶扩张状态观测器(RESO)的直线电机自抗扰控制器设计控制算法Matlab复现含文献
  • 学长亲荐9个AI论文工具,继续教育学生轻松搞定毕业论文!
  • 2-乙酰氨基-6-叠氮-2,6-双脱氧-D-葡萄糖:糖生物学研究的精准化学探针 1611491-03-2
  • 认准GEO优化,用好GEO优化,GEO优化是各行业推广首选利器 - 源码云科技
  • DM 修改dm.ini 参数
  • 【毕业设计】基于springboot的某零售商经营平台的设计与实现(源码+文档+远程调试,全bao定制等)
  • Product Hunt 每日热榜 | 2025-12-26
  • DM 内存结构
  • 【毕业设计】基于springboot的健康体检网络管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 一文讲清:AI大模型基本功——手写MOE混合专家模型
  • 烟雾报警器灰尘补偿算法
  • LLM 实战:Teacher-Student 知识蒸馏
  • 降本增效新常态:2025年企业如何借力专业IT人才外包公司?
  • 【粉丝福利社】分布式系统性能优化:方法与实践
  • Spring的异常处理机制详解
  • 云徙科技:企业全链路AI解决方案赋能伙伴
  • 锐捷设备批量下发配置telnetlib模块
  • Java 异常捕获基础知识:Exception、Error 和 Throwable
  • 2025年技术人才外派公司全攻略:核心误区、能力对比与落地避坑指南
  • 《复利效应》精读笔记