【数据结构】谈谈ArrayList和LinkedList的区别

news2025/7/24 8:00:05

 (此图源于比特高博)

上图简洁明了的列出了二者的不同点

下面咱们详细聊聊具体的

要问的是区别,问不同点,那就得从二者共有的但是不同的点来讨论

1.底层实现上:ArrayList底层是顺序表,采用数组结构;LinkedList底层是双向链表,采用链表节点的结构

2.存储空间上:ArrayList储存是在物理上连续,同时逻辑上也连续的一种数据结构;而LinkedList则是在物理上不一定连续,但在逻辑上连续的一种数据结构(这也导致了二者不同的应用场景)

3.从功能上来看

经常会有一种错误的说法:LinkedList增加删除比较快,ArrayList查找比较快

上述是一种错误的或者说是不严谨的说法

1)ArrayList的查找其实并不快,它不过是具备了随机访问的能力,因此它在随机访问上的时间复杂度为O(1),随机访问=》根据下标来获取元素,这种叫随机访问,真正快的查找应该是能根据值来获取元素的下标:indexOf这种才叫做查找!!!

你要是想在数组中查找某个元素,你不还是得遍历数组才能找到下标?这种查找的时间复杂度不就是O(N)吗?

所以ArrayList查找仍然要遍历,时间复杂度为O(N),实际上并没有优势!!!

2)LinkedList的增加删除也不快!!!因为它的底层是双向链表,双向链表会记录头和尾,你要是说在头或者尾增加删除,那么确实快,时间复杂度为O(1),但你要是说任意位置增加和删除,那真不敢苟同,比如说你在中间位置增加或者删除,难道中间位置它不需要遍历去找吗?它本身有没有记录中间位置,还是得遍历,遍历就得是O(N)

3)在插入的时候,对应ArrayList来说,存在要扩容的的机制,当插入的元素满了,就得扩容,是如果某次插入操作触发了扩容,那么本次插入就增加了额外的扩容成本

所以当我们选择的时候还是得根据实际情况来,要随机也就是根据下标来查询多的话就用ArrayList,插入的话,要是频繁插入多,就用LinkedList,这不涉及扩容的情况(在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景)


ArrayList存在的问题

1. 顺序表中间/头部的插入删除,时间复杂度为O(N)

2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。

3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。

因为上述这些问题,才会使用链表来解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16942.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

引入DDP技术:英特尔网卡让数据处理更高效

英特尔网卡引入DDP技术后,提高了云和NFV部署的数据包处理效率,按需重配置报文处理引擎,让数据处理更高效 ◆可编程报文处理流水线 ◆按需优化工作负载 ◆无需重启服务器 ◆设备使用更高效 ◆无缝启用新服务 Intel Ethernet 700系列产品…

谷粒商城项目总结(一)-基础篇

一、项目简介 本项目适合人群:学过ssm是必须的。项目里有mybatis-plus和springcloud的内容,你可以用本项目来做实践,也可以利用本项目初识cloud,但最好还是对微服务有一定了解。 下好了vargant,如果安装centos7很慢&…

是什么让 NFT 项目成为“蓝筹”?

Nov. 2022, Vincy Data Source: Footprint Analytics - Bluechip Collection 在 NFT 这样一个不稳定和新兴的行业中,要赋予项目为 "蓝筹 " 地位是很难的。然而,不少的 NFT 项目宣称自己是蓝筹项目,但它们是吗? Foot…

从零开始配置vim(29)——DAP 配置

首先给大家说一声抱歉,前段时间一直在忙换工作的事,包括但不限于交接、背面试题准备面试。好在最终找到了工作,也顺利入职了。期间也有朋友在催更,在这里我对关注本系列的朋友表示感谢。多的就不说了,我们正式进入vim …

【案例 5-1】 模拟订单号生成

【案例介绍】 1.任务描述 编写一个程序,模拟订单系统中订单号的生成。例如给定一个包括年月日以及毫秒值的 数组 arr{2019,0504,1101},将其拼接成字符串 s:[201905041101]。要求使用 String 类常用方 法来实现字符串的拼接。 2.运行结果 运行结果如图 5-1 所示 图…

【SRE】Linux加入AD域控

老牌企业一般因为安全要求或者历史遗留要求,会要求服务器加入AD域控 RHEL/CentOS/Ubuntu 加入 Windows ldap 域控 网上有各种各样的方法,很多复杂且模糊,操作到一大半发现没法推进,这个是亲测最好用的办法 使用pbis-open使Linux服…

关于Ubuntu ssh远程连接报错和无法root登录的解决方法

一、使用远程工具连接Ubuntu提示报错 MobaXterm v22.0 版本直接可以远程连接上(前提是sshd服务是开启的状态) 注意:须使用最新版本或较高版本的ssh远程连接工具,进行ssh连接;若使用较低版本的ssh远程连接工具&#xf…

MySQL产生死锁原因

阅读目录锁类型介绍死锁产生原因和示例1、产生原因2、产生示例案例一案例二案例三案例四案例五案例六锁类型介绍 MySQL 有三种锁的级别:页级、表级、行级 1 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大&#xff0c…

正则表达式(常用最新版)

密码 【1】密码必须为包含大小写字母和数字的组合,不能使用特殊字符,长度在6-10之间。 /^(?.*\\d)(?.*[a-z])(?.*[A-Z]).{6,10}$/ 【2】密码必须为包含大小写字母和数字的组合,可以使用特殊字符,长度在6-10之间。 /^(?.*[a-z]…

【快速上手系列】百度富文本编辑器的快速上手和简单使用

【快速上手系列】百度富文本编辑器的快速上手和简单使用 使用步骤 1、首先要把demo下载下来 demo链接: (18条消息) 百度富文本编辑器demo-Javascript文档类资源-CSDN文库 index.html:demo中的测试页面,可以看到很多方法使用 2、新建一个we…

【freeRTOS】操作系统之二-队列

在任何RTOS中,都具有一个重要的通信机制----消息队列。 ​ 队列是任务间通信的主要形式。**它们可用于在任务之间、中断和任务之间发送消息。**在大多数情况下,它们被用作线程安全的FIFO(先进先出)缓冲区,新数据被发送到队列的后面&#xff…

OpenCV图像处理——傅里叶变换

总目录 图像处理总目录←点击这里 十三、傅里叶变换 13.1、原理 我们生活在时间的世界中,早上7:00起来吃早饭,8:00去挤地铁,9:00开始上班。。。 以时间为参照就是时域分析。在频域中一切都是静止的 对傅里叶变换写的很好的一篇文章→ h…

【C++】队列来喽,真的很简单的

我们经历了那么多练习和顺序表,链表,栈的大风大浪,小小一个队列可以说简单至极了 练习,以及顺序表之类的文章都在我的主页哦,请认真学习之后再看本文 目录 1.队列的结构 2.实现 3.栈和队列的相互实现 1.队列的结构 …

Postgresql源码(88)column definition list语义解析流程分析

0 总结 如果调用函数时同时满足以下几种情况 在from后面。返回值为RECORD(或者是anyelement表示的RECORD)(anyelement的实际类型由入参决定,入参是RECORD,返回就是RECORD)。返回值被判定为TYPEFUNC_RECOR…

11.18 - 每日一题 - 408

每日一句:不如就利用孤单一人的时间,使自己变得更优秀,给来的人一个惊喜,也给自己一个好的交代 数据结构 1 当一棵有n个结点的二叉树按层次从上到下,同层次从左到右将结点中的数据存放在一维数组A[1…n]中…

Android App事件交互Event之模仿京东App实现下拉刷新功能(附源码 可直接使用)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、正常下拉与下拉刷新的冲突处理 电商App的首页通常都支持下拉刷新,比如京东首页的头部轮播图一直顶到系统的状态栏,并且页面下拉到顶后,继续下拉会拉出带有下拉刷新字样的布局&#x…

leaflet教程039: 只显示一屏地图,设定范围不让循环延展

第039个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet只显示一屏地图,并且根据maxBounds和bounds的设定,来改变不同的地图呈现状态。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)心得总结相…

[附源码]java毕业设计期刊在线投稿平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

小程序基础原理

前言 本文会围绕小程序的基础原理进行介绍。主要包括小程序的基础结构、编译、加载、通讯等几个方面。旨在阅读完毕后可以对小程序有一个基本的印象。 一、基础 对于用户来讲,小程序无需下载、用完即走、体验良好。 对于开发者来讲,小程序主要是区别…

同花顺_代码解析_技术指标_M

本文通过对同花顺中现成代码进行解析,用以了解同花顺相关策略设计的思想 目录 MACD MACDFS MARSI MASS MAVOL MCL MCO MFI MI MICD MIKE MTM MTMFS MACD 指数平滑异同平均线 MACD指标说明 MACD指数平滑异同移动平均线为两条长、短的平滑平均线。 其…