Java集合框架之争:ArrayList vs LinkedList

|-----------------------------------------------------------------------------------------------------------|
| 友情提示:LinkedList其实就是数据结构中的双向链表,没学过的话可以学一下有关链表的知识,至于LinkedList中的源码其实大多数据结构的基本链表操作实现的,这里我就不多做说明了,有兴趣的话可自行看源码 |

由于ArrayList由动态数组实现,LinkedList由双向链表实现,这里将它们的对比归类于数组与链表的区别

一、相同点
  • 数组和链表都是线性表,所谓线性,即结构像一条直线一样;

  • 这与非线性结构是不一样的,例如二叉树,它的结构是一个树状图,那必然不是线性的

二、不同点
1)在空间上
  • 数组使用连续空间存储,且数组容量往往会大于数据存储量,这就会有空间浪费

  • 链表(多个链表节点)使用非连续的空间,通过链表节点地址连接,对空间利用率很高

2)在时间上
  1. 按下标查询时

    数组查询数据时(get方法)直接根据下标访问,时间复杂度为O(1)

    链表查询数据时需要从头节点查找一直到找到目标元素,时间复杂度为O(n)

  2. 添加或删除时

    数组添加(而且添加有扩容操作)和删除时找到目标元素后需要移动目标元素后面的所有元素,也就是对后面的元素都需要操作一次,那么时间复杂度为O(n)

    链表添加和删除时链表找到目标节点后可以直接改变next和pre指向,时间复杂度为O(1)

所以在多用查询操作时选择数组效率更高,在使用添加和删除操作频繁时选择链表效率更高

如果您觉得该文章有用,欢迎点赞、留言并分享给更多人。感谢您的支持!

相关推荐
独自归家的兔28 分钟前
OCPP 1.6 协议详解:GetLocalListVersion 获取本地列表版本指令
java·后端·物联网·spring·ocpp1.6
程序员雷欧1 小时前
大厂OS面试高频题
面试·职场和发展
XMYX-01 小时前
28 - Go JSON 数据操作
开发语言·golang·json
三*一1 小时前
Mapbox GL JS 自研面要素整形工具开发实录
开发语言·javascript·arcgis·ecmascript
Apache RocketMQ2 小时前
RocketMQ源码解析——秒级定时消息介绍
java·云原生·消息队列·rocketmq·java-rocketmq
困意少年2 小时前
队列:先进先出为什么特别适合“流程推进”这类问题
数据结构
超级小星星2 小时前
C 语言结构体内存对齐深度解析:从概念到实战
c语言·开发语言
狮子座明仔2 小时前
AgentSPEX:当 Agent 框架开始把“控制流“从 Python 里抠出来
开发语言·python
xiaoming00182 小时前
JAVA项目打包部署运维全流程(多服务、批量)
java·linux·运维
拾-光2 小时前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式