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

面试题:详细分析Arraylist 与 LinkedList 的异同

相同点

  1. 都是List接口的实现类

    • ArrayList和LinkedList都实现了Java集合框架中的List接口,因此它们都提供了对列表元素的操作方法。
  2. 都继承了Collection接口

    • 由于List接口继承了Collection接口,所以ArrayList和LinkedList也都继承了Collection接口,具备了集合的一些基本特性。
  3. 都可以存储重复元素

    • 两者都允许存储重复的元素。
  4. 都可以通过索引访问元素

    • 尽管LinkedList的索引访问效率不如ArrayList,但两者都支持通过索引访问元素。

不同点

实现方式
  1. ArrayList

    • 基于动态数组实现。
    • 内部使用一个数组来存储元素,当数组容量不足时,会自动扩容。
  2. LinkedList

    • 基于双向链表实现。
    • 内部使用节点(Node)对象来存储元素,每个节点包含前驱节点和后继节点的引用。
性能差异
  1. 随机访问

    • ArrayList:由于基于数组实现,可以通过索引直接访问元素,时间复杂度为O(1)。
    • LinkedList:需要从头节点或尾节点开始遍历链表,时间复杂度为O(n)。
  2. 插入和删除

    • ArrayList:在中间位置插入或删除元素时,需要移动后续元素,时间复杂度为O(n)。
    • LinkedList:在中间位置插入或删除元素时,只需要修改前后节点的引用,时间复杂度为O(1)。
  3. 内存占用

    • ArrayList:由于基于数组实现,内存占用较为连续,但需要预留一定的扩容空间。
    • LinkedList:每个节点需要额外的空间存储前驱和后继节点的引用,因此内存占用较为分散。
特定方法
  1. ArrayList

    • 提供了一些特定于数组的方法,如toArray()trimToSize()等。
  2. LinkedList

    • 提供了一些特定于链表的方法,如addFirst()addLast()getFirst()removeFirst()等。
适用场景
  1. ArrayList

    • 适用于需要频繁随机访问元素的场景。
    • 适用于元素数量相对稳定,且不需要频繁插入和删除元素的场景。
  2. LinkedList

    • 适用于需要频繁插入和删除元素的场景。
    • 适用于实现队列(Queue)和栈(Stack)等数据结构。

示例代码

ArrayList示例
import java.util.ArrayList; 
import java.util.Iterator; public class ArrayListDemo {public static void main(String[] args) {ArrayList<String> userList = new ArrayList<>();userList.add("yulon"); userList.add("xiaoyun"); userList.add(" 羽龙共舞");for (int i = 0; i < userList.size();  i++) {System.out.print(userList.get(i)  + " ");}System.out.println(); Iterator<String> it = userList.iterator(); while (it.hasNext())  {System.out.print(it.next()  + " ");}System.out.println(); for (String s : userList) {System.out.print(s  + " ");}}
}
LinkedList示例
import java.util.LinkedList; 
import java.util.Iterator; public class LinkedListDemo {public static void main(String[] args) {LinkedList<String> userList = new LinkedList<>();userList.addFirst("yulon"); userList.addLast("xiaoyun"); userList.addFirst(" 羽龙共舞");for (int i = 0; i < userList.size();  i++) {System.out.print(userList.get(i)  + " ");}System.out.println(); Iterator<String> it = userList.iterator(); while (it.hasNext())  {System.out.print(it.next()  + " ");}System.out.println(); for (String s : userList) {System.out.print(s  + " ");}}
}

通过以上分析,可以看出ArrayList和LinkedList在实现方式、性能、特定方法和适用场景上都有显著的差异。选择合适的集合类可以显著提高程序的性能和可维护性。

相关文章:

面试题:详细分析Arraylist 与 LinkedList 的异同

相同点 都是List接口的实现类&#xff1a; ArrayList和LinkedList都实现了Java集合框架中的List接口&#xff0c;因此它们都提供了对列表元素的操作方法。 都继承了Collection接口&#xff1a; 由于List接口继承了Collection接口&#xff0c;所以ArrayList和LinkedList也都继承…...

软件I2C

软件I2C 注意&#xff1a; SDA&#xff08;串行数据线&#xff09;和SCL&#xff08;串行时钟线&#xff09;都是双向I/O线&#xff0c;接口电路为开漏输出。需通过上拉电阻接电源VCC。 软件I2C说明 说明&#xff0c;有的单片机没有硬件I2C的功能&#xff0c;或者因为电路设计…...

通过实例讲解螺旋模型

目录 一、螺旋模型的核心概念 二、螺旋模型在电子商城系统开发中的应用示例 第 1 次螺旋:项目启动与风险初探...

Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图,适用于真空室应用

Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图&#xff0c;适用于真空室应用...

winfrom中创建webapi

参照一下两篇 Winform窗体利用WebApi接口实现ModbusTCP数据服务_winform webapi-CSDN博客 C#.NET WebApi返回各种类型(图片/json数据/字符串)&#xff0c;.net图片转二进制流或byte - 冰封的心 - 博客园...

unity XCharts插件生成曲线图在UICanvas中

【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用_unity xcharts-CSDN博客...

Pichome 开源网盘程序index.php 文件读取漏洞(CVE-2025-1743)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

关于在Unity项目中使用Post Processing插件打包到web端出现的问题

关于在Unity项目中使用Post Processing插件打包到web端出现的问题 解决方法&#xff1a;是不激活摄像机上的Post Processing有关组件&#xff0c;拉低场景中的Directional Light平行光的强度进行web端打包。 &#xff08;烘焙灯光时是可以激活。&#xff09; web端支持这个Pos…...

Prompt Tuning:高效微调大模型的新利器

Prompt Tuning(提示调优)是什么 Prompt Tuning(提示调优) 是大模型参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)的重要技术之一,其核心思想是通过优化 连续的提示向量(而非整个模型参数)来适配特定任务。以下是关于 Prompt Tuning 的详细解析: 一、核心概念…...

OpenCV 第6课 图像处理之几何变换(重映射)

1. 概述 简单来说,重映射就是把一副图像内的像素点按照规则映射到到另外一幅图像内的对应位置上去,形成一张新的图像。 因为原图像与目标图像的像素坐标不是一一对应的。一般情况下,我们通过重映射来表达每个像素的位置(x,y),像这样: g(x,y)=f(h(x,y)) 在这里g()是目标图…...

C++初阶-vector的底层

目录 1.序言 2.std::sort(了解) 3.vector的底层 3.1讲解 3.2构造函数 3.3push_back函数 3.4begin()和end()函数 3.5capacity()和size()函数和max_size函数 3.5.1size&#xff08;&#xff09;函数 为什么这样写&#xff1f; 底层原理 3.5.2max_size()函数 为什么这…...

获取文件夹下所有文件的名称

一、为什么写这个程序 因为我要做一个类似于目录树的结构&#xff0c;需要把文件夹下的所有名字全部导出了。 二、Python和vscode的安装 先安装Python在安装vscode Python安装 vscode的安装 三、源码 import os# 定义要扫描的文件夹列表&#xff08;使用原始字符串避免转义…...

C语言指针深入详解(五):回调函数、qsort函数

目录 一、回调函数 1、使用回调函数改造前 2、使用回到函数改造后 二、qsort使用举例 1、使用qsort函数排序整型数据 2、使用qsort排序结构数据 三、qsort函数模拟实现 结语 &#x1f525;个人主页&#xff1a;艾莉丝努力练剑 &#x1f353;专栏传送门&#xff1a;《…...

数据结构进阶:AVL树与红黑树

目录 前言 AVL树 定义 结构 插入 AVL树插入的大致过程 更新平衡因子 旋转 右单旋 左单旋 左右双旋 右左双旋 实现 红黑树 定义 性质 结构 插入 实现 总结 前言 在学习了二叉搜索树之后&#xff0c;我们了解到其有个致命缺陷——当树的形状呈现出一边倒…...

容器化-K8s-镜像仓库使用和应用

一、K8s 镜像仓库使用 1、启动镜像仓库 cd/usr/local/harbor ./install.sh2、配置镜像仓库地址 在 master 节点和 slaver 节点上,需要配置 Docker 的镜像仓库地址,以便能够访问本地的镜像仓库。编辑 Docker 的配置文件 vi /etc/docker/daemon.json(如果不存在则创建),添…...

基于Spring Boot + Vue的教师工作量管理系统设计与实现

一、项目简介 随着高校信息化管理的发展&#xff0c;教师工作量管理成为教务系统中不可或缺的一部分。为此&#xff0c;我们设计并开发了一个基于 Spring Boot Vue 的教师工作量管理系统&#xff0c;系统结构清晰&#xff0c;功能完备&#xff0c;支持管理员和教师两个角色。…...

预先学习:构建智能系统的 “未雨绸缪” 之道

一、预先学习&#xff1a;训练阶段的 “模型预构建” 哲学 1.1 核心定义与生物启发 预先学习的本质是模拟人类的 “经验积累 - 快速决策” 机制&#xff1a;如同医生通过大量病例总结诊断规则&#xff0c;算法在训练阶段利用全量数据提炼规律&#xff0c;生成固化的 “决策模型…...

完善网络安全等级保护,企业需注意:

在数字化转型加速的当下&#xff0c;网络安全成为企业发展的基石。网络安全等级保护作为保障网络安全的重要举措&#xff0c;企业必须高度重视并积极落实。以下要点&#xff0c;企业在完善网络安全等级保护工作中需格外关注&#xff1a; 一、准确开展定级备案 企业首先要依据相…...

Trae 04.22版本深度解析:Agent能力升级与MCP市场对复杂任务执行的革新

我正在参加Trae「超级体验官」创意实践征文&#xff0c;本文所使用的 Trae 免费下载链接&#xff1a;Trae - AI 原生 IDE 目录 引言 一、Trae 04.22版本概览 二、统一对话体验的深度整合 2.1 Chat与Builder面板合并 2.2 统一对话的优势 三、上下文能力的显著增强 3.1 W…...

OceanBase 开发者大会:详解 Data × AI 战略,数据库一体化架构再升级

OceanBase 2025 开发者大会与5月17日在广州举行。这是继 4 月底 OceanBase CEO 杨冰宣布公司全面进入AI 时代后的首场技术盛会。会上&#xff0c;OceanBase CTO 杨传辉系统性地阐述了公司的 DataAI 战略&#xff0c;并发布了三大产品&#xff1a;PowerRAG、共享存储&#xff0c…...

正则表达式进阶(三):递归模式与条件匹配的艺术

在正则表达式的高级应用中&#xff0c;递归模式和条件匹配是处理复杂嵌套结构和动态模式的利器。它们突破了传统正则表达式的线性匹配局限&#xff0c;能够应对嵌套括号、HTML标签、上下文依赖等复杂场景。本文将详细介绍递归模式&#xff08;(?>...)、 (?R) 等&#xff0…...

ubuntu环境下 基于Python 打包的 批量命令行可视化操作工具 GUI

文章目录 一.需求&#xff1a;二.原理支撑&#xff1a;三.简单Demo四.封装成GUI1.依赖库2.代码 五.打包成可执行文件六.命令行的配置七.运行效果 一.需求&#xff1a; 作为测试工程师&#xff0c;为了到现场高效的调试&#xff0c;部署工作&#xff0c;需要一个可视化的工具&a…...

docker介绍与常用命令汇总

docker简介 docker是什么&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;它可以让开发者将应用与运行环境打包成一个标准的、可移植的容器&#xff08;Container&#xff09;&#xff0c;在任何地方都可以快速部署和运行&#xff0c;无需关心底层环境是否一致。 …...

[创业之路-369]:企业战略管理案例分析-9-战略制定-差距分析的案例之华为

一、综合案例 在战略制定中&#xff0c;华为通过差距分析明确战略方向&#xff0c;以应对市场挑战和实现长期发展目标。 以下为具体案例与分析&#xff1a; 1、案例背景 华为在通信设备领域崛起过程中&#xff0c;始终将差距分析作为战略制定的核心环节。面对国际竞争对手&…...

谷歌宣布推出 Android 的新安全功能,以防止诈骗和盗窃

在上周二的 Android Show 上&#xff0c;也就是Google I/O 开发者大会之前&#xff0c;谷歌宣布了 Android 的全新安全和隐私功能。这些新功能包括对通话、屏幕共享、消息、设备访问和系统级权限的全新保护。谷歌希望通过这些功能保护用户免遭诈骗&#xff0c;在设备被盗或被攻…...

Qt/C++编写音视频实时通话程序/画中画/设备热插拔/支持本地摄像头和桌面

一、前言 近期有客户提需求&#xff0c;需要在嵌入式板子上和电脑之间音视频通话&#xff0c;要求用Qt开发&#xff0c;可以用第三方的编解码组件&#xff0c;能少用就尽量少用&#xff0c;以便后期移植起来方便。如果换成5年前的知识储备&#xff0c;估计会采用纯网络通信收发…...

Android trace presentFence屏幕显示的帧

Android trace presentFence屏幕显示的帧 presentFence &#xff1a;当帧成功显示到屏幕时&#xff0c;present fence就会signal。 FrameMissed/GpuFrameMissed/HwcFrameMissed表示上一次合成的结果&#xff0c;当SurfaceFlinger合成后显示到屏幕上&#xff0c;present fence就…...

Spring是如何实现scope作用域支持

众所周知在Spring的Bean当中是存在两种作用域的&#xff0c;即单例模式与多例模式&#xff0c;可通过scope来指定 下面就是注册一个多例Bean <bean id"people" class"org.qlspringframework.beans.ioc.bean.People" scope"prototype"> …...

Helm Chart 中配置多个 Docker Registry 地址以实现备用访问

在 Helm Chart 中配置多个 Docker Registry 地址以实现备用访问&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 在 values.yaml 中定义多个 Registry 在 values.yaml 中定义主 Registry 和备用 Registry&#xff0c;以便在部署时灵活切换&#xff1a; # values.yaml …...

FreeSWITCH rtcp-mux 测试

rtcp 跟 rtp 占用同一个端口&#xff0c;这就是 rtcp 复用 Fs 呼出是这样的&#xff1a; originate [rtcp_muxtrue][rtcp_audio_interval_msec5000]user/1001 &echo 需要同时指定 rtcp_audio_interval_msec&#xff0c;否则 rtcp_mux 不能生效 Fs 呼入不需要配置&#xf…...