ArrayList与LinkedList的比较

简介: 在做ArrayList与LinkedList的比较之前,必须先对这两个数据结构有一定的学习和掌握,之前2篇文章分别讲了ArrayList与LinkedList的介绍和源码讲解


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

ArrayList源码浅析

LinkedList源码分析



01数据结构


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


线性结构:数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈。

:二叉树、查找树、平衡树、线索树、线索树、堆。

:建模等。

9f702c729f564587725859571f55cfb0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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


02ArrayList数组结构


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

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

ae57ea79837263f2bb9e90fa3824391c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


03LinkedList链表结构


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

单独节点元素:

d20cc2ed97b0e1ffcbe1290f8d4b45d4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.pngLinkedList整体链表结构图:

7cc5b107b6f8e8cd647a2c3c085d71ac_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


04二者比较


  1. 1、ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;
  2. 2、对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
  3. 3、对于添加和删除操作add和remove,一般大家都会说LinkedList要比ArrayList快,因为ArrayList要移动数据。但是实际情况并非这样,对于添加或删除,LinkedList和ArrayList并不能明确说明谁快谁慢。
  4. 4、当插入的数据量很小时,两者区别不太大,当插入的数据量大时,大约在容量的1/10之前,LinkedList会优于ArrayList,在其后就劣与ArrayList,且越靠近后面越差。
相关文章
|
Go 开发者
Go语言并发模型概览:CSP模型解析
【2月更文挑战第17天】Go语言以其强大的并发处理能力在编程领域崭露头角。其中,CSP(Communicating Sequential Processes)模型作为Go语言并发模型的核心之一,在并发编程中发挥着至关重要的作用。本文将深入解析CSP模型的基本原理及其在Go语言中的应用,帮助读者更好地理解Go语言的并发编程特性。
|
SQL 存储 druid
Minerva -- Airbnb 的大规模数据指标系统 Part 3
Minerva -- Airbnb 的大规模数据指标系统 Part 3
693 0
Minerva -- Airbnb 的大规模数据指标系统 Part 3
|
存储 Web App开发 消息中间件
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
|
6月前
|
机器学习/深度学习 传感器 自动驾驶
从 2D 到 BEV,LSS 技术如何重塑自动驾驶感知?
LSS(Lift-Splat-Shoot)是将多视角图像转换为BEV表示的经典技术,算法虽然老,但应用依然非常广泛
276 23
从 2D 到 BEV,LSS 技术如何重塑自动驾驶感知?
|
8月前
|
SQL 关系型数据库 MySQL
宝塔面板之MySQL无法远程连接
宝塔面板默认安装的MySQL,root用户无远程权限。本文详细介绍如何使root支持远程连接:确保3306端口已放行,通过SSH登录服务器并进入MySQL,修改root用户的host为'%',最后刷新权限。具体步骤包括使用SQL命令修改用户主机设置,并确保网络配置正确,从而实现root的远程访问。
1321 35
|
敏捷开发 定位技术 开发者
poc Proof of Concept
Proof of Concept(简称 POC)是概念验证的意思。在软件开发领域,POC 通常用于验证某个想法或概念是否可行。它通常是一个小型项目或原型,可以通过实际操作来证明某个想法或技术的有效性。POC 可以帮助开发者在项目开始之前确定技术的可行性,减少开发过程中的风险。
1995 3
|
Arthas Prometheus 监控
使用JDK自带工具调优JVM的常用命令
使用JDK自带工具调优JVM的常用命令
152 0
|
JavaScript
TypeScript——使用npm安装和编译
TypeScript——使用npm安装和编译
142 0
|
机器学习/深度学习 数据可视化 算法
Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例
Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例
|
缓存 数据安全/隐私保护
webpack5构建一个通用的组件库
webpack5构建一个通用的组件库
759 0
webpack5构建一个通用的组件库