【Java】ArrayList和LinkedList区别?想秒懂就进来看!

news/2024/5/7 5:53:39/文章来源:https://blog.csdn.net/weixin_47274607/article/details/127085605

ArrayList和LinkedList区别?

  • 1.底层结构不同
  • 2.ArrayList 和 LinkedList 都实现了 List 接口
  • 3.查询的对比
  • 4.添加的对比
    • 4.1 ArrayList 的添加操作
      • 4.1.1 在最后的位置添加元素
      • 4.1.2 在指定位置添加元素
    • 4.2 LinkedList 的添加操作
  • 5.总结
    • 5.1 以下情况使用 ArrayList
    • 5.2 以下情况使用 LinkedList

1.底层结构不同

  • ArrayList 底层是基于数组实现的,ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

  • LinkedList 底层是基于链表实现的,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

2.ArrayList 和 LinkedList 都实现了 List 接口

但是LinkedList还额外实现了Deque接口,正因为 LinkedList 实现了 Deque 接口,所以LinkedList还可以当作队列来使用。

  • ArrayList 继承 AbstractList 类,实现 List 等接口
    在这里插入图片描述
  • LinkedList 继承 AbstractSequentialList 类,实现 List 和 Deque 等接口
    在这里插入图片描述

3.查询的对比

  • 指定下标进行查询,ArrayList 优于 LinkedList
  • 是由于底层数据结构的原因,数组是提前分配好内存空间的。
  • 对于链表来说,指定下标来查询,是需要遍历链表。
  • LinkedList 在查询时存在一种特殊情况
    ---- LinkedList 在获取第一个元素和最后一个元素时很快
    ---- 原因在于,LinkedList 内部有两个属性,分别是 first 和 last 。这两个属性一直持续的记录着,底层链表里面的第一个元素的位置和最后一个元素的位置在哪里。

4.添加的对比

4.1 ArrayList 的添加操作

ArrayList 的添加操作是存在扩容的情况,并且对于 ArrayList 的添加操作要分情况考虑。

4.1.1 在最后的位置添加元素

不需要移动,需要扩容。

4.1.2 在指定位置添加元素

指定位置的元素及后面的元素,均往后移动;效率相对较慢。(因为指定了位置,所以不用去遍历查找,但是需要移动元素)

4.2 LinkedList 的添加操作

LinkedList 的添加操作不涉及扩容

  • 在最后的位置添加元素
  • 在指定位置添加元素:需要遍历找到下标,但是插入很快。

5.总结

5.1 以下情况使用 ArrayList

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

5.2 以下情况使用 LinkedList

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

补充参考:
参考一

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NXP i.MX 8M Mini开发板(4核 ARM Cortex-A53)硬件原理图规格说明书

前 言 本文档主要介绍NXP i.MX 8M Mini开发板硬件接口资源以及设计注意事项等内容。 创龙科技的NXP i.MX 8M Mini开发板是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能开发板,由核心板和评估底板组成。ARM Cortex-A53(64-b…

SMA2.92高频连接器的主要特点​

SMA2.92高频连接器的主要特点 2.92mm连接器的名称是以其外导体内径命名的,采用空气介质工作频率高达40GHz,可与SMA和3.5mm连接器互换对插。优越的电性能、可靠的连接尤其适用于测试系统和武*装备,成为国际上应用最为广泛的毫米微波连接器之一。 SMA2.92高…

[游戏开发][unity]Xlua中使用proto、json、lpeg

Xlua官方教程里有,在创建lua虚拟机时,可以添加3个处理数据的库 _luaEnv new LuaEnv(); _luaEnv.AddLoader(CustomLoaderMethod); _luaEnv.AddBuildin("rapidjson", XLua.LuaDLL.Lua.LoadRapidJson); _luaEnv.AddBuildin("lpeg", X…

零基础学SQL(一、数据库与SQL简介)

一、数据库(database)是什么 目录 一、数据库(database)是什么 二、数据库专业术语 三、常见数据库类型 四、什么是SQL 五、为什么要学习SQL 我们从百度词条中可以看到,百度对数据库的介绍如下: 数据库是“按照数据结构来组织、存储和管理…

RabbitMQ总结

一、简介 什么是 MQ MQ Message Queue 消息队列 消息队列:存放内容是消息的 FIFO(先入先出) 队列。是一种跨进程的通信机制,用于上下游传递消息。 为什么要用 MQ ?作用 1、应用解耦 以电商系统为例&#xff0c…

玻色量子荣获第二届“率先杯”未来技术创新大赛“决赛优胜奖”

​9月22日至23日,由中国科学院、深圳市人民政府联合主办的第二届“率先杯”未来技术创新大赛决赛在深圳、北京两地以“线上线下结合”的形式成功举办。大赛组委会办公室秘书处组织专家按照《大赛评审方案》对进入决赛的项目进行评审,经择优遴选&#xff…

vue3项目创建并运行

vue搭建 准备环境 npmnodewebpackvs code npm 使用brew命令行进行下载安装指定版本: brew install npm查看版本号: $ npm -v 8.15.0Node 进入官网nodejs,根据自己电脑的版本进行下载安装,如果是mac电脑,可以直接…

分布式文件存储系统MinIO笔记

文章目录一、MinIO介绍1、文件系统应用场景2、MinIO介绍3、MinIO优点4、MinIO的基础概念5、纠删码EC(Erasure Code)6、存储形式7、存储方案二、Minio环境搭建1、介绍2、单机部署2.1 单机部署2.2 基于Linux部署2.3 基于docker部署(推荐)3、minio 纠删码模…

塑料划分PP PE PS PA ABS PVC

**PET(聚酯)代号1, **又叫涤纶树脂,原料呈乳白色或浅黄色,透明性好,无毒,具有密度高,硬度高,耐磨损,但不耐热水侵泡,不耐碱等特点,使…

2022年暨南大学计算机830真题

学科、专业名称:网络空间安全 研究方向:网络空间安全083900 考试科目名称及代码:数据结构830 考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。 一、 单项选择题 (每题2分,共20分) 下列程…

[python刷题模板] 珂朵莉树 ODT (基于支持随机访问的跳表

[python刷题模板] 珂朵莉树 ODT (基于支持随机访问的跳表) 一、 算法&数据结构1. 描述2. 复杂度分析3. 常见应用4. 常用优化二、 模板代码0. 区间推平(lg),单点询问(lg) CF292E. Copying Data1. 区间推平,区间询问最小值2. 区…

Unity Lighting 面板的参数设置用途详细总结

一、Environment 环境光 二、Scene 1、如果选择生成LightMap 要关闭实时光,开启烘培光 lighting mode为Mixed时,lighting settings的Mixed Lighting可用于设置混合的方式:Baked Indirect mode提供最高质量的光照,其设置只牵扯间…

windows环境下elasticsearch使用教程

windows环境下elasticsearch使用教程如下: 一、首先安装jdkElasticSearch是基于lucence开发的,lucence是apache开发的,因此ElasticSearch运行环境就需要java jdk支持。所以要先安装JAVA环境。由于ElasticSearch 5.x 往后依赖于JDK 1.8的&…

HAPPE+ER:一款让脑电研究人员“更快乐”的软件,可用于事件相关电位(ERP)分析的标准化预处理管道

导读 事件相关电位(ERP)设计是用脑电图(EEG)检测神经认知功能的常用方法。然而,传统的ERP数据预处理方法是手动编辑,这是一个主观且耗时的过程。最近创建了许多自动化通道,以满足EEG数据预处理的标准化、自动化和量化的需求;然而…

知识经济时代的基石:知识协同

管理学家彼得德鲁克(1994)指出:“企业管理的本质不在于技术与程序,而在于使知识有效。”在知识占主导地位的社会里,企业依靠知识进行创新的能力代表了企业在竞争中的优势,也是企业成功与否的标志。 世界变…

C++——string的封装

参考string类完成my_string类 #include <iostream> #include<cstring> using namespace std; class my_string { private:char *str;int len; public://无参构造my_string(){len 15;str new char[len];cout<<"无参构造"<<endl;}//有参构造…

IDEA通过原型(骨架)创建MavenJavaWeb项目

IDEA通过原型&#xff08;骨架&#xff09;创建MavenJavaWeb项目 目录IDEA通过原型&#xff08;骨架&#xff09;创建MavenJavaWeb项目一、通过原型&#xff08;骨架&#xff09;创建MavenJavaWeb项目二、配置tomcat一、通过原型&#xff08;骨架&#xff09;创建MavenJavaWeb项…

【PTA】输出学生成绩

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 专栏&#xff1a;PTA习题及解析 介绍&#xff1a;记录了博主在pta学习练题 目录前言1.简介2.优点一、题目二、代码前言 1.简介 “PTA程序…

【面试题】面试官: Vue如何实现权限管理?

我正在参加「掘金启航计划」 一、权限管理 权限管理就是让不同的用户只能访问自己权限内的资源&#xff0c;有以下几种 路由权限&#xff0c;用户登录后只能看到自己权限内的导航菜单&#xff0c;且只能访问自己权限内的路由地址视图权限&#xff0c;用户只能看到自己权限内…

朗涛任命Juanita Zhang为中国大陆区总经理,Peggy Hon为中国香港区总经理

在迅速发展的消费环境中&#xff0c;带领才华横溢的多元创意团队&#xff0c;持续推动业务发展 &#xff08;中国上海&#xff0c;2022年9月27日&#xff09;近日&#xff0c;全球顶尖的品牌设计与咨询公司朗涛宣布重要人事任命&#xff0c;分别任命Juanita Zhang为中国大陆区总…