当前位置: 首页 > news >正文

面试题:ArrayList和LinkedList的区别

ArrayList和LinkedList都是Java中实现List接口的集合类,用于存储和操作对象列表,但它们在内部数据结构、性能特性和适用场景上有所不同:

1.内部数据结构:

  • ArrayList:基于动态数组实现。这意味着它在内存中是连续存储的,类似于传统的数组,但容量可以自动增长。
  • LinkedList:基于双向链表实现。每个元素(节点)包含数据和两个指针,分别指向前一个和后一个节点,因此不需要连续的内存空间。

2.时间复杂度: 

  • ArrayList:由于数据是连续存储的,可以通过索引直接访问元素,因此随机访问(如get和set操作)非常快,时间复杂度为O(1)。
  • LinkedList:由于需要从头节点开始遍历链表到达指定位置,随机访问性能较差,时间复杂度为O(n)。

3.内存使用: 

  • ArrayList:由于是连续存储,可能需要较大的连续内存空间,且在扩容时可能需要复制整个数组。
  • LinkedList:每个节点除了存储数据外,还需要额外的空间来存储指针,因此在大量节点的情况下可能会消耗更多内存。

4.插入和删除: 

  • ArrayList:在中间插入或删除元素时,需要移动后续元素以保持数组的连续性,这可能导致较慢的性能,时间复杂度为O(n)。
  • LinkedList:插入和删除操作更快,只需更改相邻节点的指针即可,时间复杂度为O(1),特别是当操作发生在列表的两端时。

 总结:如果应用中需要频繁地进行随机访问元素,而插入和删除操作较少,ArrayList可能是更好的选择。相反,如果经常需要在列表中间进行插入和删除操作,并且随机访问较少,LinkedList将提供更好的性能。根据具体的应用场景选择合适的集合类型,可以显著提高程序的运行效率。

查找效率:

①:随机访问---- ArrayList > LinkedList (ArrayList采用下标,LinkedList只能遍历全部进行查找)

②:增加和删除效率(非末尾)----- ArrayList < LinkedList 

③:内存空间的占用------ ArrayList < LinkedList (LinkedList除了存储数据还有两个引用,一个指向前面的元素,一个指向后面的元素)

总结:频繁读取集合元素时采用ArrayList,频繁删除和插入元素时采用LinkedList

 扩展:

1、为什么说ArrayList的插入和删除效率较慢

①:ArrayList的扩容机制

②:元素的移动问题 

 

2、ArrayList扩容机制:默认大小为10,扩容1.5倍 

相关文章:

面试题:ArrayList和LinkedList的区别

ArrayList和LinkedList都是Java中实现List接口的集合类&#xff0c;用于存储和操作对象列表&#xff0c;但它们在内部数据结构、性能特性和适用场景上有所不同&#xff1a; 1.内部数据结构&#xff1a; ArrayList&#xff1a;基于动态数组实现。这意味着它在内存中是连续存储…...

【王树森】深度强化学习(DRL)学习笔记

目录 第一部分&#xff1a;基础知识1.机器学习基础2.蒙特卡洛估计3.强化学习基础知识3.1 马尔科夫决策过程马尔可夫决策过程&#xff08;Markov decision process&#xff0c;MDP&#xff09;智能体环境状态状态空间动作动作空间奖励状态转移状态转移概率 3.2 策略策略定义 3.3…...

LLM应用实战:当图谱问答(KBQA)集成大模型(三)

1. 背景 最近比较忙(也有点茫)&#xff0c;本qiang~想切入多模态大模型领域&#xff0c;所以一直在潜心研读中... 本次的更新内容主要是响应图谱问答集成LLM项目中反馈问题的优化总结&#xff0c;对KBQA集成LLM不熟悉的客官可以翻翻之前的文章《LLM应用实战&#xff1a;当KBQ…...

Django框架中Ajax GET与POST请求的实战应用

系列文章目录 以下几篇侧重点为JavaScript内容0.0 JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;上&#xff09;JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;下&#xff09;Django框架中Ajax GET与POST请求的实战应用VSCode调试揭秘&#xff1a;L…...

web前端怎么挣钱, 提升技能,拓宽就业渠道

web前端怎么挣钱 在当今数字化时代&#xff0c;Web前端技术已成为互联网行业中不可或缺的一部分。越来越多的人选择投身于这个领域&#xff0c;希望能够通过掌握前端技术来实现自己的职业发展和经济收益。那么&#xff0c;Web前端如何挣钱呢&#xff1f;接下来&#xff0c;我们…...

基于Python的信号处理(包络谱,低通、高通、带通滤波,初级特征提取,机器学习,短时傅里叶变换)及轴承故障诊断探索

Python是一种广泛使用的解释型、高级和通用的编程语言&#xff0c;众多的开源科学计算软件包都提供了Python接口&#xff0c;如计算机视觉库OpenCV、可视化工具库VTK等。Python专用计算扩展库&#xff0c;如NumPy、SciPy、matplotlab、Pandas、scikit-learn等。 开发工具上可用…...

大型语言模型智能体(LLM Agent)在实际使用的五大问题

在这篇文章中&#xff0c;我将讨论人们在将代理系统投入生产过程中经常遇到的五个主要问题。我将尽量保持框架中立&#xff0c;尽管某些问题在特定框架中更加常见。 1. 可靠性问题 可靠性是所有代理系统面临的最大问题。很多公司对代理系统的复杂任务持谨慎态度&#xff0c;因…...

C语言内存管理

1.进程的内存分布 练习&#xff1a;编写一个程序&#xff0c;测试栈空间的大小 #include<stdio.h>#define SIZE 1024*1024*7void main (void) {char buf[SIZE];buf[SIZE-1] 100;printf("%d\n",buf[SIZE-1]); }如果SIZE 大小超过8M(102410248)&#xff0c;…...

AD24设计步骤

一、元件库的创建 1、AD工程创建 然后创建原理图、PCB、库等文件 2、电阻容模型的创建 注意&#xff1a;防止管脚时设置栅格大小为100mil&#xff0c;防止线段等可以设置小一点,快捷键vgs设置栅格大小。 1.管脚的设置 2.元件的设置 3、IC类元件的创建 4、排针类元件模型创建…...

基于MBD的大飞机模块化广域协同研制

引言 借鉴国外航空企业先进经验&#xff0c;在国内&#xff0c;飞机型号的研制通常采用基于模型定义&#xff08;MBD&#xff09;的三维数模作为唯一的设计制造协同数据源&#xff0c;从而有效减少了设计和制造部门之间的模型沟通成本和重构所需的时间&#xff0c;也减少或避免…...

鸿蒙轻内核M核源码分析系列二十 Newlib C

LiteOS-M内核LibC实现有2种&#xff0c;可以根据需求进行二选一&#xff0c;分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码&#xff0c;均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。 使用Musl C库的时候&#xff0c…...

力扣1818.绝对差值和

力扣1818.绝对差值和 把nums1拷贝复制一份 去重排序 对于每个nums2都找到差距最小的那个数(二分) 作差求最大可优化差值去重排序可以直接用set 自动去重排序了 const int N 1e97;class Solution {public:int minAbsoluteSumDiff(vector<int>& nums1, vector<i…...

矩阵练习2

48.旋转图像 规律&#xff1a; 对于矩阵中第 i行的第 j 个元素&#xff0c;在旋转后&#xff0c;它出现在倒数第i 列的第 j 个位置。 matrix[col][n−row−1]matrix[row][col] 可以使用辅助数组&#xff0c;如果不想使用额外的内存&#xff0c;可以用一个临时变量 。 还可以通…...

2024海南省大数据教师培训-Hadoop集群部署

前言 本文将详细介绍Hadoop分布式计算框架的来源&#xff0c;架构和应用场景&#xff0c;并附上最详细的集群搭建教程&#xff0c;能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。 一、Hadoop介绍 Hadoop是一个开源的分布式计算框架&…...

力扣算法题:将数字变为0的操作次数--多语言实现

无意间看到&#xff0c;力扣存算法代码居然还得升级vip。。。好吧&#xff0c;我自己存吧 golang&#xff1a; func numberOfSteps(num int) int {steps : 0for num > 0 {if num%2 0 {num / 2} else {num - 1}steps}return steps } javascript: /*** param {number} num…...

vue前段处理时间格式,设置开始时间为00:00:00,设置结束时间为23:59:59

在Vue开发中&#xff0c;要在前端控制日期时间选择器的时间范围&#xff0c;可以通过以下方式实现&#xff1a; 使用beforeDestroy生命周期钩子函数来处理时间范围&#xff1a; 在Vue组件中&#xff0c;可以监听日期时间选择器的变化&#xff0c;在选择开始日期时&#xff0c;自…...

Java 8 新特性全面解读

Java 8&#xff0c;作为一次重大更新&#xff0c;于2014年引入了多项创新特性&#xff0c;极大地改善了Java的编程体验和性能。此版本不仅加入了对函数式编程的支持&#xff0c;还增强了接口的功能&#xff0c;引入了新的API&#xff0c;并优化了语言的整体效率。接下来&#x…...

JavaScript知识之函数

javascript函数 在JavaScript基础之上提供了部分函数,同时也可以自定义函数,JavaScript基础详见之前的文章javascript基础知识 自定义函数 //关键字 函数名 参数列表 函数体 function test(a,b,c){alert(a":"b":"c) }function test1(a,b){return a;//不…...

【Pepper机器人开发与应用】一、Pepper SDK for LabVIEW下载与安装教程

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f4d1;上期文章&#xff1a;『一文汇总对比英伟达、AMD、英特尔显卡GPU』 &#x1f37b;本文由virobotics(仪酷智能)原创 &#x1f973;欢迎大家关注✌点赞&…...

HCIP-AI EI 认证课程大纲

该阶段详细介绍计算机视觉、注意力机制与Transformer、自然语言处理、语音处理等 AI 核心领域技术&#xff0c;并重点介绍华为云 EI 服务使用。 共计48 课时。第一节&#xff1a;计算机视觉技术概述与图像处理基础 - &#xff08;3 课时&#xff09; - 什么是计算机视觉&#x…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...