面试题:ArrayList和LinkedList的区别

news2024/11/17 1:26:42

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倍 

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

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

相关文章

NodeJS体育用品销售管理系统-计算机毕业设计源码88807

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

BDD100k

摘要 数据集推动视觉进步&#xff0c;但现有的驾驶数据集在视觉内容和支持任务方面都很贫乏&#xff0c;以研究自动驾驶的多任务学习。研究人员通常被限制在一个数据集上研究一小部分问题&#xff0c;而现实世界的计算机视觉应用需要执行各种复杂的任务。我们构建了一个包含10…

一张试卷

目录 问题 1: 1.时间 题目描述1 输入1 输出1 样例输入1 样例输出1 提示1 代码1 问题 2: 超酷的电话号码 题目描述2 输入2 输出2 样例输入2 样例输出2 提示2 代码2 问题 3:3.爸爸的数学题 题目描述3 输入3 输出3 样例输入3 样例输出3 提示3 代码3 问题 4: 4. 营养膳食 题目描述4…

c# 学习 3

显示转换 异常捕获 语法

Django面试题

1. 什么是wsgi&#xff1f; WSGI 是 “Web Server Gateway Interface” 的缩写&#xff0c;它是一种用于 Python Web 应用程序和 Web 服务器之间通信的标准接口。它定义了一组规则和约定&#xff0c;使 Web 服务器能够与任何符合 WSGI 规范的 Python Web 应用程序进行交互。 #…

Javascript学习之路:js中关于遍历总结

循环/遍历 循环&#xff0c;就是一遍又一遍的重复执行相同或者相似的代码循环结构的两个要素 循环体–要执行的相同或相似的语句循环条件–重复执行的次数&#xff0c;或者继续执行循环的条件 &#x1f449;while循环 while循环语法格式 while(boolean表达式){循环体语句}//…

3D高斯泼溅原理及实践【3DGS】

人工智能可能是我们这个时代的主要领域之一&#xff0c;它几乎可以用于从驾驶汽车到医疗保健甚至能够预防失明等所有领域&#xff0c;最近提出了一种新的 3D 重建方法。SNGULAR 及其人工智能团队希望了解有关 3D 重建技术的最新更新的更多信息。 目前可用于 3D 重建的许多 SOT…

[干货!必看文章]学会如何用L4级AI软件开发平台免费制作应用程序

前言&#xff1a; 自从ChatGPT问世以来&#xff0c;就掀起了全球AI大模型的浪潮。国外有Claude&#xff0c;Llama&#xff0c;Grok&#xff0c;Suno&#xff0c;国内有kimi&#xff0c;有智谱AI&#xff0c;有通义千问&#xff0c;还有文心一言... 国内大模型市场规模已经达到了…

【Python/Pytorch - 网络模型】-- 手把手搭建U-Net模型

文章目录 文章目录 00 写在前面01 基于Pytorch版本的UNet代码02 论文下载 00 写在前面 通过U-Net代码学习&#xff0c;可以学习基于Pytorch的网络结构模块化编程&#xff0c;对于后续学习其他更复杂网络模型&#xff0c;有很大的帮助作用。 在01中&#xff0c;可以根据U-Net…

瓦片边界可视化工具

本文涉及的核心内容 瓦片边界可视化-VisibleTileBoundariesmeethigher/visible-tile-boundaries: visible tiles boundaries demo 一、瓦片边界可视化 1.1 背景 日常GIS开发中&#xff0c;需要了解瓦片是什么&#xff0c;瓦片展示的效果是什么样的。这种口头上抽象的东西&a…

计算机哈佛架构、冯·诺依曼架构对比

哈佛架构和冯诺依曼架构是两种不同的计算机系统架构&#xff0c;它们在存储器组织方式上有着显著的区别。下面是它们的原理、优缺点的对比以及一些常见的 MCU 采用的架构&#xff1a; 哈佛架构&#xff1a; 原理&#xff1a;哈佛架构将指令存储器&#xff08;程序存储器&#x…

Androd adb命令汇总,app专项测试命令。

1.普通命令 1.1 devices命令 # 语法格式 &#xff1a;adb devices [-l] # 作用 &#xff1a;返回已连接设备的信息 # 示例 &#xff1a;adb devices : 返回设备的信息adb devices -l : 返回设备的详细信息1.2 help命令 # 语法格式 &#xff1a;adb --help # 作用 &…

攻防世界--杂项misc-2017_Dating_in_Singapore

题目信息 题目描述和附件分别是一串数字和新加坡日历&#xff0c;数字中间有短线-连接&#xff0c;刚好分成了12个字段。猜想对应了12个月 01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-020…

集合进阶(接口Collection(迭代器、增强for、Lambda表达式)、List中常见的方法和五种遍历方式、数据结构(栈、队列、数组、链表)

一、单列集合顶层Collection List系列集合&#xff1a;添加的元素是有序、可重复、有索引Set系列集合&#xff1a;添加的元素是无序、不重复、无索引 Collection是单列集合的祖宗接口&#xff0c;它的功能是全部单列集合都可以继承使用的。 Collection的遍历方式 1、迭代器——…

catia零件装配中通过指南针移动零件

1 将零件导入进来后 2 把指南针移动到零件上 具体移动哪个可以通过模型树点击选中&#xff0c;选中那个就可以移动那个。 这种情况需要注意的是 需要双击选择要移动零件的父节点 如下图&#xff0c;Product2蓝色表示是激活的&#xff0c;这样才可以单击选中下面的零件后通过…

STM32F103RCT6换STM32F103C8T6后delay函数延时了10倍

更换单片机步骤&#xff1a; 1、型号选择 2、启动文件&#xff0c;将HD改为MD。 3、引入对应的启动文件。 4、后面发现delay比之前延时了差不多10倍&#xff0c;解决办法&#xff1a;在初始化后加入SystemInit();即可。

Frontiers旗下期刊,23年分区表整理出炉!它还值得投吗?

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解

博客主页&#xff1a;誓则盟约 系列专栏&#xff1a;IT竞赛 专栏 关注博主&#xff0c;后期持续更新系列文章 如果有错误感谢请大家批评指出&#xff0c;及时修改 感谢大家点赞&#x1f44d;收藏⭐评论✍ 问题描述&#xff1a; 小蓝有一个大小为 N N 的棋盘&#xff08;棋…

110.网络游戏逆向分析与漏洞攻防-装备系统数据分析-装备与技能描述信息的处理

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

javaWeb项目-ssm+vue医院住院信息管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java简介 现代社…