ArrayList 和 LinkedList 有什么区别?

news2024/9/28 11:17:11

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.coloradmin.cn/o/1516887.html

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

相关文章

程序员注意“进厂”时机!!鸿蒙生态已进入第二发展阶段

自打今年1月份鸿蒙宣布星河版发布后,已经有200家大型互联网企业展开鸿蒙原生合作。就在今天的3月14日,继钉钉、高德、淘宝、UC浏览器、夸克等app应用启动鸿蒙原生开发后。又迎来阿里旗下多款应用与华为举行鸿蒙合作签约仪式,宣布将基于Harmon…

如何更简捷地在 Java 中进行函数式编程

public static void findNemo(List names) { boolean found false; for(String name : names) { if(name.equals(“Nemo”)) { found true; break; } } if(found) System.out.println(“Found Nemo”); else System.out.println(“Sorry, Nemo not found”); } …

【文献阅读】A Fourier-based Framework for Domain Generalization(基于傅立叶的领域泛化框架)

原文地址:https://arxiv.org/abs/2105.11120 摘要 现代深度神经网络在测试数据和训练数据的不同分布下进行评估时,存在性能下降的问题。领域泛化旨在通过从多个源领域学习可转移的知识,从而泛化到未知的目标领域,从而解决这一问…

“禁止互撕”新规第二天,热搜把#章子怡“怒怼”网友#推上了榜一

3月12日,微博热搜发布公告,对热搜词条处置规则进行了更新。 针对热搜词条长期以来存在的引战互撕、挑唆对立等不良现象,热搜生态秩序亟待改善,微博给出了两大解决方案: 一是更新热搜词条处置规则,当热搜词…

吴恩达机器学习笔记 二十 机器学习开发过程 增加数据

选择结构(模型、数据等)-->训练模型-->诊断(偏差、方差、误差分析) 增加数据 1.增加全新的 x、y 2.数据增强(data augumentation) 3.数据合成(data synthesis) 目前算法和模型已经比较完善了,可以考虑专注设…

mac系统下GCC优化编译的使用

mac系统下GCC优化编译的使用 编译流程 预处理:g -E homework.cpp -o homework.i 编译:g -S homework.i -o homework.s //.s为汇编文件 汇编:g -c homework.s -o homework.o 链接:g homework.o -o homework 优化选项 -O0&#…

陷入“3·15”旋涡的两轮电动车,急需降“火”

正值备受关注的“315”国际消费者权益日,此前陷入“火灾风波”的两轮电动车,又一次回到舆论中心。 最近,市场监管总局发布电动自行车消费提示,目的是帮助消费者科学购买和使用相关产品,防范可能发生的安全风险。其中提…

【深度学习】diffusers 学习过程记录,StableDiffusion扩散原理

教程地址:https://huggingface.co/docs/diffusers/quicktour 文章目录 环境扩散模型噪声残差的作用原理,文字编码如何给入Unetschedulerguidance_scalescheduler.init_noise_sigma训练时候的反向传播 环境 python3.10安装环境: pip install…

影城管理系统|基于springboot框架+ Mysql+Java+B/S架构的影城管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…

基于Spring Boot的社区团购系统,计算机毕业设计(带源码+论文)

源码获取地址: 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1767743385296252930

搭建项目前端系统基础架构

Vue是什么 Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。目前市面上有很多基于Vue重新封装的各种前端UI框…

暗光增强——IAT网络推理测试(详细图文教程)

IAT模型由两个独立的分支组成,局部分支用于像素调整,并输出两个用于加法和乘法的特征图。全局分支用于全局调整并输出颜色矩阵和gamma值,全局分支受DETR启发,网络通过动态查询学习的方式更新颜色矩阵和gamma值。整个模型只有超过9…

Day63:WEB攻防-JS应用算法逆向三重断点调试调用堆栈BP插件发包安全结合

目录 前置知识 JS调试分析 JS分析调试结合Burp JS分析调试知识点: 1、JavaScript-作用域&调用堆栈 2、JavaScript-断点调试&全局搜索 3、JavaScript-Burp算法模块使用 前置知识 JS加密数据走向 浏览器调试 1、作用域:(本地&全…

Infineon_TC264智能车代码初探及C语言深度学习(二)

本篇文章记录我在智能车竞赛中,对 Infineon_TC264 这款芯片的底层库函数的学习分析。通过深入地对其库函数进行分析,C语言深入的知识得以再次在编程中呈现和运用。故觉得很有必要在此进行记录分享一下。 目录 ​编辑 一、代码段分析 NO.1 指向结构体…

Python 合并两张图片

发现一个很有意思的图片处理包PIL,可以将两张图片合并成一张,而且很好看。代码如下 from PIL import Image# 打开两张图片 image1 Image.open("1.jpg").convert("RGBA") image2 Image.open("2.jpg").convert("RGB…

Siamese Network(孪生神经网络)详解

Siamese和Chinese有点像。Siam是古时候泰国的称呼,中文译作暹罗。Siamese也就是“暹罗”人或“泰国”人。Siamese在英语中是“孪生”、“连体”的意思,这是为什么呢?十九世纪泰国出生了一对连体婴儿,当时的医学技术无法使两人分离…

设置浏览器显示小于12px以下字体

问题 我们在项目开发过程中有时候会遇到设计师给的小于12px的字体,IE、火狐浏览器、移动端等小于12px的字号大小还是可以正常显示的,但是谷歌浏览器上显示字体最小为12px,css设置font-size:10px,运行代码显示结果仍然…

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里面含有…

网络原理(网络协议初识)

目录 1.网络通信基础 1.1IP地址 1.2端口号 1.3认识协议 1.4五元组 1.5 协议分层 2.TCP/IP五层(或四层)模型 2.1网络设备所在分层 2.2网络分层对应 3.封装和分用 1.网络通信基础 网络互连的目的是进行网络通信,也即是网络数据传输&#…

[Kali] 安装Nessus及使用

在官方网站下载对应的 Nessus 版本:Download Tenable Nessus | TenableDownload Nessus and Nessus Managerhttp://www.tenable.com/products/nessus/select-your-operating-system这里选择 Kali 对应的版本 一、安装 Nessus 1、下载得到的是 deb 文件,与