【java】ArrayList与LinkedList的区别

news2024/11/6 6:28:18

目录

          • 1. 说明
          • 2. 内部实现
            • 2.1 ArrayList
            • 2.2 LinkedList
          • 3. 性能特点
            • 3.1 插入和删除操作
            • 3.2 访问操作
            • 3.1 遍历操作
          • 4. 使用场景
          • 5. 扩容机制
          • 6. 空间开销

1. 说明
  • 1.Java中的ArrayList和LinkedList是两种常用的集合实现类,都属于Java集合框架的一部分,但它们在内部实现、性能特点、使用场景等方面存在明显的区别。
2. 内部实现
2.1 ArrayList
  • 1.是动态数组的实现,底层使用数组来存储元素。
  • 2.元素在物理内存中是连续存储的。
2.2 LinkedList
  • 1.是链表(特别是双向链表)的实现。
  • 2.每个元素都包含数据本身以及指向前一个元素和后一个元素的指针(或引用)。
  • 3.元素在物理内存中不一定是连续存储的。
3. 性能特点
3.1 插入和删除操作
  • 1.ArrayList:在ArrayList中进行插入和删除操作时,需要移动插入或删除点之后的所有元素来保持元素的连续性,因此这些操作的时间复杂度为O(n)。特别地,在列表的末尾添加元素时,ArrayList的性能相对较好,因为不需要移动元素。
  • 2.LinkedList:在LinkedList中插入和删除元素时,只需要修改相关节点的指针即可。因此,这些操作的时间复杂度为O(1)(在列表的头部或尾部操作时)或O(n)(在列表的中间位置操作时,因为需要遍历到该位置)。然而,由于LinkedList的节点是分散存储的,所以这些操作在实际执行时可能比ArrayList更快,因为它们避免了大量数据的移动。
3.2 访问操作
  • 1.ArrayList:由于ArrayList中的元素是连续存储的,因此可以通过索引在O(1)时间内访问到任何位置的元素。
  • 2.LinkedList:LinkedList不支持通过索引快速访问元素,因为元素在物理内存中不是连续存储的。访问LinkedList中的元素需要从头或尾开始遍历链表,直到找到目标元素,因此访问操作的时间复杂度为O(n)。
3.1 遍历操作
  • 1.使用迭代器遍历ArrayList时,由于元素是连续存储的,所以遍历效率较高。
  • 2.使用迭代器遍历LinkedList时,由于元素是分散存储的,迭代器需要不断通过指针跳转来访问下一个元素,因此遍历效率相对较低。然而,在特定情况下(如只需要遍历列表的一部分元素时),LinkedList的遍历性能可能优于ArrayList。
4. 使用场景
  • 1.ArrayList:适用于需要频繁进行随机访问和遍历操作的场景。特别是在列表大小相对稳定、不经常进行插入和删除操作的情况下。
  • 2.LinkedList:适用于需要频繁进行插入和删除操作的场景。特别是在列表的头部或尾部进行操作时。此外,LinkedList还可以用作栈(LIFO)或队列(FIFO)等数据结构的实现。
5. 扩容机制
  • 1.ArrayList在初始化时需要指定初始容量(默认为10),并且会在元素数量超过当前容量时自动扩容(通常是将容量增加为原来的1.5倍),这会导致一定的内存浪费和复制开销。
  • 2.LinkedList不需要在添加元素时进行扩容操作,因此可以避免ArrayList在扩容时可能产生的内存浪费和复制开销。
6. 空间开销
  • 1.ArrayList中的元素是连续存储的,因此空间开销相对较小(除了元素本身外,还需要一些额外的空间来存储数组的长度和容量等信息)。
  • 2.LinkedList的每个节点都需要额外的空间来存储指向前一个节点和后一个节点的指针(或引用),因此其空间开销相对较大。

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

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

相关文章

Linux scp命令 | 菜鸟教程-从本地复制到远程/从远程复制到本地

目录 Linux scp命令 语法 实例 1、从本地复制到远程 2、从远程复制到本地 说明 文章来源:Linux scp命令 | 菜鸟教程 Linux scp命令 nux scp 命令用于 Linux 之间复制文件和目录。 scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远…

计算机毕业设计Python+大模型膳食推荐系统 知识图谱 面向慢性病群体的膳食推荐系统 健康食谱推荐系统 机器学习 深度学习 Python爬虫 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

大数据集群中实用的三个脚本文件解析与应用

目录 一、jps - cluster.sh 脚本文件 (一)背景与功能 (二)使用方法 二、集群文件分发脚本 xsync.sh (一)背景与问题 (二)功能与实现原理 (三)脚本编写…

【数据分享】1981-2024年我国逐日平均气温栅格数据(免费获取)

气象数据一直是一个价值很高的数据,它被广泛用于各个领域的研究当中。这其中,又以平均气温数据最为常用!之前我们分享过来源于美国国家海洋和大气管理局(NOAA)下设的国家环境信息中心(NCEI)发布的1929-2024年全球站点的…

多模态PaliGemma——Google推出的基于SigLIP和Gemma的视觉语言模型

前言 本文怎么来的呢?其实很简单,源于上一篇文章《π0——用于通用机器人控制的流匹配VLA模型:一套框架控制7种机械臂(改造了PaliGemma和ACT的3B模型)》中的π0用到了PaliGemma 故本文便来解读下这个PaliGemma 第一部分 PaliGemma 1.1 Pal…

开源模型应用落地-glm模型小试-glm-4-9b-chat-Gradio集成(三)

一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异&a…

ABAP开发学习——OLE

目录 1.概览 2.OEL的实现方式 3.OLE的配置 4.OLE的实现 4.1 OLE Demo 4.2 OLE实现的步骤 5.OLE实现样例 5.1 OLE中的的类型转换 5.2 变量定义 5.3 创建对象 5.4 表单页的操作 5.5 设置文件保存路径 5.6 文件是否可见 5.7 单元格操作 5.7.1 给单元格赋值 5.7.2…

在Java中,实现数据库连接通常使用JDBC

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…

单臂路由实现不同VLAN之间设备通信

转载请注明出处 本实验为单臂路由配置,目的为让不同VLAN之间的设备能够互相通信。 1.首先,按照要求配置两个pc的ip地址,以pc0为例子: 2在交换机创建vlan10和vlan20 3.划分vlan,pc0为vlan10的设备,pc1为vla…

前后端交互通用排序策略

目录 排序场景 排序实现思路 1. 静态代码排序实现 2.数据库驱动排序实现 3. 基于Java反射的动态排序实现 通用排序工具 SortListUtil 结语 排序场景 在面向前端数据展示的应用场景中,我们旨在实现一个更加灵活的排序机制,该机制能够支持对从后端传递…

【华为云-云驻共创】UCS跨云多活容灾:让业务高可用不再是难题

【摘要】云原生应用深入到企业各个业务场景,云原生正在走向分布式化,跨云跨域统一协同治理,保证一致应用体验,这些新的需求日益凸显。而容灾是确保服务高可用的保障,但即使应用部署在云上,也无法避免市政方…

Linux内核编程(十九)SPI子系统的应用与驱动编写

本文目录 一、 SPI驱动框架图二、编写SPI驱动device框架三、编写SPI驱动driver框架四、实验一编写mcp2515驱动1. 注册字符设备或杂项设备框架2. SPI写数据3. SPI读寄存器数据 4. MCP2515相关配置 对于SPI基础知识这里不做过多讲解,详情查看:SPI基础知识实…

谍影重重5.0

打开流量包可以发现,流量中含有大量的smb加密通信,并且使用了ntlm v2加密协议进行身份认证 包过滤ntlmssp 认证后smb协议进行了大量的数据传输 取出tom的包内数据 得到以下数据 username:tomdomain: .NTProofStr: ca32f9b5b48c04ccfa96f35213d63d75NT…

qt QAbstractItemModel详解

1. 概述 QAbstractItemModel是Qt框架中的一个核心抽象基类,在Qt的模型/视图架构中扮演着至关重要的角色。这个类提供了一个接口,用于表示和管理数据,但不直接处理数据的存储。它的主要功能是为视图组件(如QListView、QTableView和…

华为OD机试 - 无重复字符的元素长度乘积的最大值(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

【C++之STL】一文学会使用 string

文章目录 1. STL导读1. 1 什么是STL1. 2 STL的版本1. 3 STL六大组件1. 4 STL的重要性1. 5 STL的学习1. 6 STL系列博客的规划 2. string2. 1 为什么学习string类?2. 2 标准库中的string2. 3 基本构造2. 4 尾插与输出运算符重载2. 5 构造函数2. 6 赋值运算符重载2. 7 容量操作2.…

【分布式】分布式锁设计与Redisson源码解析

分布式锁 分布式锁是一种在分布式计算环境中用于控制多个节点(或多个进程)对共享资源的访问的机制。在分布式系统中,多个节点可能需要协调对共享资源的访问,以防止数据的不一致性或冲突。分布式锁允许多个节点在竞争访问共享资源…

【实测有效】两个Ubuntu系统通过网线传输文件

基本思路是:连接网线后,通过设置静态IP,将两台电脑配置在同一个局域网内,再进行文件传输。 一、物理连接 使用网线将两台电脑的网口连接起来。 二、静态IP设置 两台电脑均需要对各自的静态IP进行设置。 1、查看电脑的IP地址 1&a…

Android camera2

一、序言 为了对阶段性的知识积累、方便以后调查问题,特做此文档! 将以camera app 使用camera2 api进行分析。 (1)、打开相机 openCamera (2)、创建会话 createCaptureSession (3)、开始预览 setRepeatingRequest (4)、停止预览 stopRepeating (5)、关闭…

【Redis_Day3】Redis通用命令

【Redis_Day3】Redis通用命令 redis客户端的三种形态redis的快与慢redis通用命令阅读redis官方文档redis中两个核心命令set命令get命令 redis全局命令keys命令:查询当前服务器上的key生产环境 exists命令:判定key是否存在del命令:删除指定的k…