在 java 中 arraylist 与 linkedlist 的区别

ArrayList和LinkedList都是Java中的类,它们都实现了List接口,但是它们在实现方式和性能上有一些重要的区别。

  1. 底层实现

    • ArrayList 是基于动态数组的实现,它的元素在内存中是连续存储的。
    • LinkedList 是双向链表的实现,它的元素在内存中并不一定连续存储,每个元素都包含一个指向前一个和后一个元素的引用。
  2. 内存空间

    • ArrayList 通常需要更多的内存,因为每个元素后面都需要额外的空间来存储数组的偏移量。
    • LinkedList 则相对较少,因为它只需要存储前一个和后一个元素的引用。
  3. 访问元素

    • ArrayList 的访问速度很快,因为它是在连续的内存空间中存储的。所以,随机访问某个索引的元素非常快。
    • LinkedList 的访问速度较慢,因为需要从链表的头或尾部开始遍历。所以,随机访问某个索引的元素比较慢。
  4. 添加和删除元素

    • 在列表的头部添加或删除元素,ArrayListLinkedList 的性能都很好。
    • 在列表的尾部添加或删除元素,ArrayList 的性能更好,因为它的时间复杂度是O(1)。而LinkedList需要从头部开始遍历到尾部,时间复杂度是O(n)。
    • 在列表的中间添加或删除元素,LinkedList 的性能更好,因为它的时间复杂度是O(1)。而ArrayList需要移动后面的所有元素,时间复杂度是O(n)。
  5. 插入和删除操作

    • 对于在特定位置插入或删除元素的操作,LinkedList 的性能更好,因为它支持在常数时间内进行插入和删除操作。
    • ArrayList 需要在特定的位置移动元素,因此时间复杂度是O(n)。
  6. 其他操作

    • ArrayList 提供了更多的方法,例如get()set()remove()contains()等。
    • LinkedList 提供了更多的方法,如addFirst()addLast()removeFirst()removeLast()等。
  7. 扩容:当ArrayList的空间不足以容纳更多元素时,它需要重新分配更大的内部数组并复制所有元素。这是一个相对昂贵的操作。而LinkedList不需要考虑这个问题,因为它可以动态地添加或删除节点。

  8. 线程安全:ArrayList和LinkedList都不是线程安全的。如果你在多线程环境中使用它们,可能会遇到线程安全问题。在这种情况下,可以考虑使用线程安全的集合类,如VectorCollections.synchronizedList()方法返回的列表。

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

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

相关文章

Redis核心数据结构之SDS(一)

数据结构与对象 简单动态字符串 概述 Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,简称C字符串),而是自己构建了一种名为简单动态字符串(Simple Dynamic String, SDS)的后向类型,并将SDS用作Redis的默认字符串表示。在…

数据库学习案例20240304-mysql数据库案例总结(碎片,统计信息)

1 表中的碎片 在InnoDB中删除行的时候,这些行只是被标记为“已删除”,而不是真正从物理存储上进行了删除,因而存储空间也没有真正被释放回收。InnoDB的Purge线程会异步地来清理这些没用的索引键和行。但是依然没有把这些释放出来的空间还给操…

基于SSM的农业电商服务系统(农产品销售管理系统)(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的农业电商服务系统(农产品销售管理系统)(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller&#…

五、软考-系统架构设计师笔记-信息安全技术基础知识

信息安全技术基础知识 1、信息安全基础知识概述 信息安全的概念 信息安全包括 5 个基本要素: 机密性:确保信息不暴露给未授权的实体或进程。完整性:只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改。可用性:得到授权的实体在需要时可以…

SpringBoot源码解读与原理分析(四十)基于jar/war包的运行机制

文章目录 前言第14章 运行SpringBoot应用14.1 部署打包的两种方式14.1.1 以可独立运行jar包的方式14.1.2 以war包的方式 14.2 基于jar包的独立运行机制14.2.1 可独立运行jar包的相关知识14.2.2 SpringBoot的可独立运行jar包结构14.2.3 JarLauncher的设计及工作原理14.2.3.1 Jar…

06、MongoDB -- MongoDB 基本用法(删除文档、查询文档、查询运算符)

目录 MongoDB 基本用法演示前提:登录单机模式的 mongodb 服务器命令登录【admin】数据库的 mongodb 客户端命令登录【test】数据库的 mongodb 客户端命令 删除文档语法格式两个变体版本:1、remove:根据【name】字段删除一条文档2、deleteOne&…

代码工具APEX的入门使用(未包含安装)

第一次使用APEX是2019年,这个技术成名已久只是我了解的比较晚。请看Oracle ACE的网站,这就是用APEX做的。实际上有一次我看O记的人操作他们的办公流程,都是用APEX做的。 那一年,我用APEX做了一个CMDB的管理系统。那时候还没有流行…

从0搭建Azure DevOps Server

Windows虚拟机搭建DevOps 服务器 背景资源准备安装软件需求流程版本兼容性安装SQL ServerSSMS安装visual StudioAzure DevOps Server测试本地访问端口更改及外界访问 背景 搭建一台Azure DevOps Server 供我们运维项目开发,现在DevOps运维已成为一个主流&#xff0…

C向C++的一个过渡

思维导图 输入输出,以及基础头文件 在c语言中我们常用scanf("%d",&n);和printf("%d\n",n);来输出一些变量和常量,在C中我们可以用cin;和cout;来表示输入输出。 在C语言中输入输出有头文件,在C也有头文件&#xff0…

软件应用,财务收支系统试用版操作教程,佳易王记录账单的软件系统

软件应用,财务收支系统试用版操作教程,佳易王记录账单的软件系统 一、前言 以下软件操作教程以 佳易王账单记账统计管理系统V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图,统计报表包含 收支汇…

在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新

文章目录 一、需求背景二、token刷新的方案1、根据过期时间重新获取2、定时刷新token接口3、使用了RefreshToken 三、关于RefreshToken四、Refresh Token的优点五、Refresh Token的工作原理六、Refresh Token的使用流程七、Refresh Token的实现步骤1、登录成功后保存AccessToke…

前端CSS常考问题总结

目录 CSS盒模型 CSS选择器的优先级 隐藏元素的方法 px和rem的区别是什么? 重绘重排有什么区别? 重排(回流): 重绘: 浏览器的渲染机制: 浏览器如何解析CSS? 元素水平垂直居中的方式 CSS的哪些属性哪些可以…

php开发项目 docx,pptx,excel表格上传阿里云,腾讯云存储后截取第一页生成缩略图

服务器或者存储上传的word,ppt和excel表格需要截取内容展示的时候,就需要管理后台每次上传文件时根据不同文件类型截取图片保存起来,并讲图片的地址保存到数据字段中.网上搜索了很多相关文章遇到的坑不少,经过2天时间终于完成了,将代码和遇到的问题完整记录下来. 本文用的…

【前端寻宝之路】总结学习使用CSS的引入方式

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-BNJBIEvpN0GHNeJ1 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

IDEA自动导入provided的依赖

最近在学习flink 流程序&#xff0c;在写demo程序的时候依赖flink依赖&#xff0c;依赖的包在flink集群里面是自己已经提供了的&#xff0c;在导入的时候配置为provided&#xff0c;像下面这样&#xff0c;以使打包的时候不用打到最终的程序包里面。 <dependency><gro…

Java8,函数式编程应用:

持续更新中&#xff1a; 函数式(Functional)接口 什么是函数式(Functional)接口 只包含一个抽象方法的接口&#xff0c;称为函数式接口。 你可以通过 Lambda 表达式来创建该接口的对象。&#xff08;若 Lambda 表达式 抛出一个受检异常(即&#xff1a;非运行时异常)&#xff0c…

FastDfs 部署 保姆 级 步骤

注&#xff1a; 1.这是在 b栈后端项目中用到 &#xff0c; github or 课程官方文档 &#xff0c;都难免遇到问题 2.我这里只是将单机部署 跑通了 why fastdfs? FastDFS&#xff08;Fast Distributed File System&#xff09;是一个开源的分布式文件系统&#xff0…

js创建对象方式总结

js创建对象方式总结 字面量方式 使用大括号 {} 创建一个新对象&#xff0c;这是最简单直接的方式。适用于创建单个对象&#xff0c;可以直接在大括号内定义属性和方法。 let person {name: John,age: 30,gender: male};let preson2 {name: John,age: 30,gender: male};cons…

高级优化理论与方法(一)

高级优化理论与方法&#xff08;一&#xff09; 前言基本概念优化的概念定义优化的写法邻域局部最优Terms(术语&#xff09;&#xff1a;可行方向定义内部点极限点边界 导数一阶导二阶导例子 方向导数例子 Unconstrained Optimization&#xff08;无约束优化&#xff09;FONC证…

光伏发电预测

XGB、LGB在datacamp(学习网站) data fountain与国家电投系列赛,光伏发电预测 题目:给一组特征,预测瞬时发电量,训练集9000个点,测试集8000个点,特征包含光伏板的属性和外部环境等。 数据字段:ID、光伏电池板背侧温度、光伏电站现场温度、计算得到的平均转换效率、数…