ArrayList 和 LinkedList 有什么区别?

1、典型回答

ArrayList 和 LinkedList 是 Java 中常用的集合类,它们都实现了 List 接口,如下图所示:

但二者有以下几点不同:

1、底层数据结构实现不同:

  • ArrayList 底层使用数组实现,它通过一个可调整大小的数组来存储元素
  • LinkedList 底层使用双向链表实现,它通过链表节点来连接元素

2、插入和删除的效率不同:

  • ArrayList 对于插入和删除操作的性能相对较低,因为需要进行元素的移动和数组的重新分配,尤其是在ArrayList 列表最前面插入和删除时,效率最慢
  • LinkedList 对于插入和删除操作会比 ArrayList 更好,因为它只需要修改相邻节点的指针即可

3、随机访问效率不同:

  • ArrayList 对于随机访问(根据索引获取元素)具有更好的性能,因为可以通过索引直接计算元素在数组中的位置,时间复杂度为 O(1)
  • LinkedList 对于随机访问的性能较差,需要通过链表节点一个个遍历找到对应的索引位置,时间复杂度为 O(n)

4、内存要求和占用空间大小不同:

  • ArrayList 在内存中需要连续的存储空间,因此在存储大量数据时,需要有大块的连续内存空间,所以对内存要求较高(不能有太多的内存碎片)
  • LinkedList 不要求有连续的内存空间,它的链表是逻辑的先后顺序,每个元素用额外的空间来存储指向前、后的节点指针,所以,LinkedList 相对而言会占用更多的内存空间

因此,在多查的场景下考虑使用 ArrayList,而在插入和删除比较多的场景下考虑使用 LinkedList

2、全面剖析

ArrayList 和 LinkedList 是 Java 中常用的集合类,它们都实现了 List 口,但它们在底层实现上、插入删除的效率上、随机访问的效率上,以及内存要求和占用空间的大小上都是不同的。

3、知识扩展

ArrayList 是如何进行扩容的?-CSDN博客

链表的分类有哪些?-CSDN博客

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

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

相关文章

力扣热题100_矩阵_73_矩阵置零

文章目录 题目链接解题思路解题代码 题目链接 73.矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…

如何在Windows搭建WebDav服务,并外网可访问

目录 1. 安装IIS必要WebDav组件 2. 客户端测试 3. 使用cpolar内网穿透,将WebDav服务暴露在公网 3.1 打开Web-UI管理界面 3.2 创建隧道 3.3 查看在线隧道列表 4. 公网远程访问 4.1 浏览器访问测试 4.2 映射本地盘符访问 4.3 安装Raidrive客户端 总结&…

STM32第九节(中级篇):RCC——时钟树讲解(第一节)

目录 前言 STM32第九节(中级篇):RCC——时钟树讲解 时钟树主系统时钟讲解 HSE时钟 HSI时钟 锁相环时钟 系统时钟 SW位控制 HCLK时钟 PCLKI时钟 PCLK2时钟 RTC时钟 MCO时钟输出 6.2.7时钟安全系统(CSS) 小结 前言 从…

2024Python二级

1. 2. 前序遍历首先访问根节点再访问左子树和右子树 3. 4. sub不属于保留字 5. 6. 7. 8. continue是再重新开始进行循环,不是题目中所规定字母的话就对它进行输出 9. Python没有主函数的说法 10. 未转化为数据所要求的形式,应首先考虑eval 11. l…

【unity接入SDK案例】从0到1 如何接入百度地图SDK到unity中【一】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

BUUCTF-Misc9

刷新过的图片1 1.打开附件 2.F5-steganography-master 利用F5-steganography-master工具 3.修改扩展名为压缩包 4.得到flag [BJDCTF2020]你猜我是个啥1 1.打开附件 是一个压缩包,但解压不了,不是压缩文件 2.010 Editor 用010 Editor查看,最…

Leet code 三步问题

解题思路:动态规划 先观察 1级台阶 1种方法 2级台阶 2种方法 3级台阶 4种方法 4级台阶 7种方法 5级台阶 13种方法 可以看出规律 从3级台阶后 每级台阶需要从前三层台阶和相加 注意:后面值会过大 需要在相加之后就模运算1000000007 代码如下 clas…

智慧路灯杆AI监测应用,让高速出行更安全

高速公路是现代交通出行的重要组成,高速公路上的交通安全也一直是人们关注的焦点。针对更好监测和管理高速公路上的交通状况,可以基于智慧路灯杆打造AI交通监测应用,通过智能感知高速路段的路况、车况、环境状况,实现实时风险感知…

轻松驾驭时间流:MYSQL日期与时间函数的实用技巧

​🌈 个人主页:danci_🔥 系列专栏:《MYSQL应用》💪🏻 制定明确可量化的目标,坚持默默的做事。 MySQL的时间函数用于处理日期和时间数据。以下是一些常用的MySQL时间函数。 内容有点多&#xff0…

log4j2 burp插件-Log4j2Scan(二)

该工具为被动扫描Log4j2漏洞CVE-2021-44228的BurpSuite插件,具有多DNSLog(后端)平台支持,支持异步并发检测、内网检测、延迟检测等功能。 一、安装方法 建议使用BurpSuite 2020或以上更高版本,低版本BurpSuite未经严…

【idea】查看spring源代码没有注释

问题描述 点击类(如:AnnotationConfigApplicationContext )看到的没有注释 看到有: Decompiled .class file, bytecode version: 52.0 (java 8) 翻译过来是:解压.class文件,字节码版本:52.0…

【数据结构与算法】:插入排序与希尔排序

🔥个人主页: Quitecoder 🔥专栏: 数据结构与算法 欢迎大家来到初阶数据结构的最后一小节:排序 目录 1.排序的基本概念与分类1.1什么是排序的稳定性?1.2内排序与外排序内排序外排序 2.插入排序2.1实现插入排序2.3稳定性…

Linux:kubernetes(k8s)Deployment的操作(13)

创建deployment 命令 kubectl create deploy nginx-deploy --imagenginx:1.7.9 再去使用以下命令分别查询 ubectl get deploy kubectl get replicaset kubectl get pod 他是一个层层嵌套的一个关系 首先是创建了一个 deploy 里面包含着replicaset replicaset里面含有…

WPF —— Grid网格布局

1 :Grid网格布局简介 Grid为WPF中最常用的布局容器, 作为View中的主要组成部分, 负责框架中整体的页面布局。 2:网格标签Grid.ColumnDef Grid.ColumnDefinitions自定义列 只能设置宽度 不能设置高度ColumnDefinition 每一个列可以设置宽度,…

有来团队后台项目-解析6

element-icon 引入 安装 在解析3中,已经安装过 创建plugins 文件夹 icons 文件 import type { App } from "vue"; import * as ElementPlusIconsVue from "element-plus/icons-vue";// 注册所有图标 export function setupElIcons(app: App…

使用docker搭建ELK进行日志收集

目录 docker安装es docker安装kibana 为es配置中文分词器 安装原生logstash 项目服务集成日志收集 为es设置登录密码 为kibana设置登录密码 为es容器设置内存限制 使用htop或者是docker进行内存使用查询 docker安装es 与自己的springBoot版本适配即可,下面…

鸿蒙开发实战:【电话服务子系统】

简介 电话服务子系统,提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。应用可以通过调用API来获取当前注册网络名称、网络服务状态、信号强度以及SIM卡的相关信息。 各个模块主要作用如下: 核心服务模块:主要功能是初始化RI…

Docker进阶:深入了解 Dockerfile

Docker进阶:深入了解 Dockerfile 一、Dockerfile 概述二、Dockerfile 优点三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命令15、…

U盘启动盘 制作Linux Ubuntu CentOS系统启动盘 系统安装

U盘启动盘 制作Linux Ubuntu CentOS系统启动盘 系统安装 准备条件 准备一个U盘,建议容量至少为8GB,以便存放系统镜像文件 一台已经安装好操作系统的计算机,用于制作U盘启动盘 Ubuntu和CentOS的Linux ISO镜像文件。可以从官方网站或相关资源…

【学一点RISC-V】RISC-V IMSIC

IMSIC RISC-V AIA 文档 第三章 Incoming MSI Controller (IMSIC) 传入 MSI 控制器(IMSIC)是一个可选的 RISC-V 硬件组件,与 hart 紧密相连,每个 hart 有一个 IMSIC。IMSIC 接收并记录 Hart 的传入消息信号中断 (MSI),并…