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

源码分析【三】ArrayList与LinkedList的比较

-


源码分析系列


源码分析【一】LinkedList链表结构


源码分析【二】ArrayList数组


源码分析【三】ArrayList与LinkedList的比较

 


前言
在做ArrayList与LinkedList的比较之前,必须先对这两个数据结构有一定的学习和掌握,之前2篇文章分别讲了ArrayList与LinkedList的介绍和源码讲解,感兴趣的伙伴可以戳下方链接分别查阅:


1、ArrayList源码浅析


2、LinkedList源码分析


一、数据结构
CS专业的学生都学过一门课程叫:数据结构,里面专门讲了数据结构的原理知识和算法等。常见数据结构分为3大种:线性结构、树结构、图结构。


线性结构:数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈。
- 树:二叉树、查找树、平衡树、线索树、线索树、堆
- 图:建模等

![](https://i-blog.csdnimg.cn/blog_migrate/616daa72ca91c48be8f87311016b60c5.png)


其中,ArrayList与LinkedList就是属于线性结构,但一个是数组结构,一个是链表结构。有各自的特点和优势,在使用上也有各自的区别。


二、ArrayList的数组结构
上面说了,线性结构中的数组分为动态数组和静态数组,那么ArrayList是属于哪种呢?答案是动态数组,Array是我们学习数组时的基本概念,在初始定义一个数组时,设置了数组大小,运行时数组大小固定不变这样就是静态数组。那么,ArrayList是Array的升级和复杂版,它能支持程序运行中动态扩展数组的大小,因此它是动态数组。


使用上,ArrayList是动态数组,支持随机快速访问get和set操作。


![](https://i-blog.csdnimg.cn/blog_migrate/b5bf63271c81ff69cb329974a000158f.png)


三、LinkedList的链表结构
链表结构包括:单向链表、双向链表、循环链表,由之前文章的源码解析(上方链接)可看出,LinkedList是一个双向链表结构,每个节点既存储了上一节点的引用又存储了当前节点的物理地址(内容),还存储了下一节点的引用。


单独节点元素:


![](https://i-blog.csdnimg.cn/blog_migrate/997d2adf16e2178351fe04be914d93e0.png)


LinkedList整体链表结构图:


![](https://i-blog.csdnimg.cn/blog_migrate/7d31dfb917859eb66acb404cc1e42b59.png)


四、ArrayList与LinkedList的比较
- ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;


-  对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;


-  对于添加和删除操作add和remove,一般大家都会说LinkedList要比ArrayList快,因为ArrayList要移动数据。但是实际情况并非这样,对于添加或删除,LinkedList和ArrayList并不能明确说明谁快谁慢。


- 插入的数据量很小时,两者区别不太大,当插入的数据量大时,大约在容量的1/10之前,LinkedList会优于ArrayList,在其后就劣与ArrayList,且越靠近后面越差。

 


 




![](https://i-blog.csdnimg.cn/blog_migrate/c6588a897387ffefcdda1428dcd8e7dd.jpeg)

更多内容关注公众号:
程序大视界

http://www.rkmt.cn/news/1433717.html

相关文章:

  • TVA在传统安防迈向智能物联(AIoT)中的突破与应用(2)
  • LibreDWG完全指南:5个关键优势解决DWG文件处理难题
  • 告别低效写作:盘点2026年实力封神的的降AI率平台 - 降AI小能手
  • 《中间件》——kafka的工作原理解析
  • 终极魔兽争霸III游戏优化工具:简单三步提升你的游戏体验
  • 2026 年 5 个最佳 Agent Skills 平台推荐
  • 3个关键词让你的小爱音箱智能下载歌曲:Xiaomusic语音指令实用指南
  • 手把手教你用VMware安装华为EulerOS 2.0 SP5(附详细分区与开发环境配置)
  • Qt版本管理实战:从5.12.3平滑降级到5.9.8,并让VS2022同时识别多个Qt版本
  • D3KeyHelper终极指南:5分钟掌握暗黑3自动化战斗技能宏工具
  • 别等硬盘挂了才后悔!保姆级教程:用smartctl给你的Linux服务器硬盘做个全面体检(附关键指标解读)
  • Debian11最小化安装后,浏览器中文乱码?5分钟搞定中文字体配置(附常用字体包清单)
  • 3大技术突破:douyin-downloader如何实现批量无水印视频的智能获取?
  • TCSVT期刊投稿实战:如何用LaTeX高效排版并处理图表与多媒体文件
  • LinkSwift:九大网盘直链解析工具,告别下载等待的终极解决方案
  • 统信UOS任务栏高效模式 vs 时尚模式,哪个更适合你的工作流?
  • 避坑指南:用铅画纸打印骰子教具,图案模糊、嵌套失败的3个关键原因与解决方案
  • 2026CRM软件大盘点:三梯队10款主流产品解析 - Joyky
  • UE5 RPG实战:手把手教你用GameplayEffect实现三种药水效果(瞬回、持续、Buff)
  • 告别文件互导!用Omniverse Live-Sync在UE和USD Composer之间玩转实时灯光与材质编辑
  • 3分钟找回Windows 11消失的任务栏拖放功能:零风险修复指南
  • NC65 后台SQL实战:科目余额表的多维度数据透视与聚合查询
  • 终极NCM音乐解密指南:3分钟快速解锁网易云加密音乐文件
  • 告别手动管理!用Unity Addressable系统实现资源热更新(含本地/远程路径配置详解)
  • 告别虚拟机!在Win10上用WSL2打造CentOS开发环境(含Git、Miniconda、VSCode配置)
  • 从‘半兰伯特’到屏幕色彩:拆解Unity渐变纹理Shader,理解它如何悄悄影响你的游戏画面
  • 即梦去水印教程:全场景即梦去水印方法适配图片视频各类导出需求 - 科技热点发布
  • 2026年5月北京国际小学推荐:五强榜专业评测学费性价比高注意事项 - 品牌推荐
  • 用Flask和Python爬取m3u8视频流:从本地保存到一键上传Cloudflare R2的完整流程
  • 宏洛图合作客户估值盘点:覆盖海内外大健康美妆全品类 - 宏洛图品牌设计