【java】ArrayList与LinkedList的区别
目录
- 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的每个节点都需要额外的空间来存储指向前一个节点和后一个节点的指针(或引用),因此其空间开销相对较大。
相关文章:
【java】ArrayList与LinkedList的区别
目录 1. 说明2. 内部实现2.1 ArrayList2.2 LinkedList 3. 性能特点3.1 插入和删除操作3.2 访问操作3.1 遍历操作 4. 使用场景5. 扩容机制6. 空间开销 1. 说明 1.Java中的ArrayList和LinkedList是两种常用的集合实现类,都属于Java集合框架的一部分,但它们…...
【LangChain系列6】【Agent模块详解】
目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、Agent模块详解2-0、Agent核心思想——React介绍2-0-1、React的介绍以及由来2-0-2、伪代码介绍React的执行顺序 2-1、Agent介绍2-1、Self ask with se…...
JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用
JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用 Cookie是一种甜点,同时也是web前端开发中一种非常常见且重要的技术,它用于在客户端和服务器之间存储和传递信息。用户身份验证、会话管理,还是用户个性化设置,都离不开Coo…...
深入了解Git、GitHub、GitLab及其应用技巧
在现代软件开发中,掌握版本控制系统(VCS)是至关重要的,其中Git是最流行的分布式版本控制工具之一。本文将详细介绍Git的用途及其基本操作,并深入探讨GitLab、GitHub、和Git Desktop的使用方法,同时总结Git的…...
ctfshow(316,317,318)--XSS漏洞--反射性XSS
反射型XSS相关知识 Web316 进入界面: 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题,看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台,…...
Visual Studio2022版本的下载与安装
1-首先打开微软的官网,下面就是链接 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux免费下载 Visual Studio IDE 或 VS Code。 在 Windows、Mac 上试用 Visual Studio Professional 或企业版。https://visualstudio.microsoft.com/zh-hans/downloads/?…...
nodeJS程序如何引入依赖包
在 Node.js 运行时中引入依赖包通常通过以下步骤完成: 初始化项目: 首先,你需要初始化一个 Node.js 项目。如果你还没有 package.json 文件,可以使用 npm init 命令来创建它。运行以下命令并按提示输入相关信息: npm i…...
建网站怎么建?只需几个步骤
在这个网络飞速发展的时代,越来越多的人都渴望拥有自己的网站。然而,对于大多数新手来说,如何建立自己的网站可能充满了挑战。本文将为您详细介绍建网站的关键步骤,让您能够轻松搭建自己的网站。 选择适合的建站工具 虽然市面上有…...
机器学习课程总结(个人向)
前言 通过看课件PPT整理的笔记,没有截图 由于大部分内容已经耳熟能详了,故记录比较简略,只记录了一些概念和需要记忆的地方。 里面有较多的个人观点,未必正确。如有错误,还请各位大佬指正 正文 绪论 机器学习的定…...
数据分析-43-时间序列预测之深度学习方法GRU
文章目录 1 时间序列1.1 时间序列特点1.1.1 原始信号1.1.2 趋势1.1.3 季节性和周期性1.1.4 噪声1.2 时间序列预测方法1.2.1 统计方法1.2.2 机器学习方法1.2.3 深度学习方法2 GRU2.1 模拟数据2.2 数据归一化2.3 生成滞后特征2.4 切分训练集和测试集2.5 模型训练2.6 模型预测3 参…...
Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法
类型转换 传统方法astype使用value_counts统计通过apply替换并使用astype转换 pd.to_numericx对连续变量进行转化⭐参数:返回值:示例代码: isnull不会检查空字符串 数据准备 有一组数据信息如下,其中主要将TotalCharges、MonthlyC…...
Elasticsearch的自定义查询方法到底是啥?
Elasticsearch主要的目的就是查询,默认提供的查询方法是查询全部,不满足我们的需求,可以定义查询方法 自定义查询方法 单条件查询 我们查询的需求:从title中查询所有包含"鼠标"这个分词的商品数据 SELECT * FROM it…...
Jenkins找不到maven构建项目
有的可能没有出现maven这个选项 解决办法:需要安装Maven项目插件 输入Maven Integration plugin...
怎么更换IP地址 改变IP归属地的三种方法
要更换自己的IP地址,您可以按照以下步骤进行操作: 1. 了解IP地址类型:首先,您需要了解您当前使用的IP地址类型。IP地址分为静态IP和动态IP两种。静态IP地址是固定的,使用第三方软件比如S深度IP转换器;而使用…...
C#-异步查询示例
文章速览 CancellationTokenSource 概述代码示例 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ CancellationTokenSource 概述 使用System.Threading下的CancellationTokenSource类,进…...
设计模式之适配器模式(从多个MQ消息体中,抽取指定字段值场景)
前言 工作到3年左右很大一部分程序员都想提升自己的技术栈,开始尝试去阅读一些源码,例如Spring、Mybaits、Dubbo等,但读着读着发现越来越难懂,一会从这过来一会跑到那去。甚至怀疑自己技术太差,慢慢也就不愿意再触碰这…...
vue+exceljs前端下载、导出xlsx文件
首先安装插件 npm install exceljs file-saver第一种 简单导出 //页面引入 import ExcelJS from exceljs; import {saveAs} from file-saver; export default {methods: { /** 导出操作 */async handleExportFun() {let that this// 获取当前年月日 用户下载xlsx的文件名称设…...
算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能
在现代社会,随着人工智能技术的飞速发展,智能监控系统在公共安全领域的应用日益广泛。其中,烟火检测作为预防火灾的重要手段,其准确性和实时性对于减少火灾损失、保障人民生命财产安全具有重要意义。而算法定制LiteAIServer烟火检…...
用 Python 从零开始创建神经网络(二)
用 Python 从零开始创建神经网络(二) 引言1. Tensors, Arrays and Vectors:2. Dot Product and Vector Additiona. Dot Product (点积)b. Vector Addition (向量加法) 3. A Single Neuron with …...
嘉吉连续第七年亮相进博会
以“新质绿动,共赢未来”为主题,嘉吉连续第七年亮相进博会舞台。嘉吉带来了超过120款产品与解决方案,展示嘉吉在农业、食品、金融和工业等领域以客户为中心的创新成果。这些产品融合了嘉吉在相关领域的前瞻性思考,以及对本土市场的…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
