【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的每个节点都需要额外的空间来存储指向前一个节点和后一个节点的指针(或引用),因此其空间开销相对较大。

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

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

相关文章

sql数据库-DQL-条件查询

条件查询 SELECT 字段列表 FROM 表名 WHERE 条件列表; 条件列表 比较运算符功能> 大于>大于等于 < 小于<小于等于等于!不等于between...and...某个范围之间&#xff08;闭区间&#xff09;IN(...)在in之后的列表中的值&#xff0c;多选一LIKE 通…

Android CCodec Codec2 (二十)C2Buffer与Codec2Buffer

在阅读Codec2框架代码时&#xff0c;我们可能会发现好几个名称中都带有“buffer”的类&#xff0c;如MediaCodecBuffer、ABuffer、CCodecBuffers、Codec2Buffer以及C2Buffer。它们分别是什么&#xff1f;各自承担着什么功能&#xff1f;它们之间有何联系&#xff1f;本文将围绕…

WPF怎么通过RestSharp向后端发请求

1.下载RestSharpNuGet包 2.请求类和响应类 public class ApiRequest {/// <summary>/// 请求地址/// </summary>public string Route { get; set; }/// <summary>/// 请求方式/// </summary>public Method Method { get; set; }/// <summary>//…

SQL Server 日志记录

SQL Server是一个关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;旨在有效地存储、组织、检索和操作大量结构化数据。SQL Server日志是监控数据库活动、排查问题和确保数据一致性的基础&#xff0c;这些日志记录了SQL Server实例中发生的事件的时间顺序。它们充当…

书生实战营第四期-基础岛第三关-浦语提示词工程实践

一、基础任务 任务要求&#xff1a;利用对提示词的精确设计&#xff0c;引导语言模型正确回答出“strawberry”中有几个字母“r”。 1.提示词设计 你是字符计数专家&#xff0c;能够准确回答关于文本中特定字符数量的问题。 - 技能&#xff1a; - &#x1f4ca; 分析文本&…

默认 iOS 设置使已锁定的 iPhone 容易受到攻击

苹果威胁研究的八个要点 苹果手机间谍软件问题日益严重 了解 Apple 苹果的设备和服务器基础模型发布 尽管人们普遍认为锁定的 iPhone 是安全的&#xff0c;但 iOS 中的默认设置可能会让用户面临严重的隐私和安全风险。 安全研究员 Lambros 通过Pen Test Partners透露&#…

双指针算法篇——一快一慢须臾之间解决问题的飘逸与灵动(3)

前言&#xff1a;本篇来到双指针算法介绍的最终篇&#xff0c;该文将通过三个同类型但难度逐渐累增的题目&#xff0c;再次强化对双指针算法的理解和运用。 相关题目及讲解 一. 两数之和 题目链接&#xff1a;LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetC…

sparkSQL的UDF,最常用的regeister方式自定义函数和udf注册方式定义UDF函数 (详细讲解)

- UDF&#xff1a;一对一的函数【User Defined Functions】 - substr、split、concat、instr、length、from_unixtime - UDAF&#xff1a;多对一的函数【User Defined Aggregation Functions】 聚合函数 - count、sum、max、min、avg、collect_set/list - UDTF&#xff1a;…

Springcloud高校选课管理系统-计算机毕业设计源码27115

摘 要 随着信息技术的快速发展和高校信息化建设的深入推进&#xff0c;选课管理系统作为高校教育信息化建设的重要组成部分&#xff0c;其重要性和紧迫性日益凸显。传统的选课管理系统往往采用单体架构&#xff0c;存在系统耦合度高、可维护性差、扩展性不强等问题&#xff0c;…

ChatGPT 新体验:AI 搜索功能与订阅支付指南

就在凌晨&#xff0c;在 ChatGPT 迎来两周岁生日之际&#xff0c;OpenAI 重磅发布了 ChatGPT 的全新人工智能搜索体验。 期待已久的时刻终于到来&#xff0c; ChatGPT 正式转型成为一款革命性的 AI 搜索引擎&#xff01; 先来看看 ChatGPT 搜索&#xff1a;这次不是简单的加个…

奇瑞汽车:降阶模型在新能源汽车热管理仿真上的应用

随着新能源汽车的发展&#xff0c;对仿真技术的要求也越来越高。那么奇瑞汽车利用降阶模型在新能源汽车热管理仿真上做了哪些应用呢&#xff1f;本次内容主要从四个方面展开介绍&#xff1a; 1、 奇瑞汽车简介&#xff1b; 2、 热管理降阶模型开发的背景&#xff1b; 3、 高低…

RPC核心实现原理

目录 一、基本原理 二、详细步骤 三、额外考虑因素 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;也是一种用于实现分布式系统中不同节点之间进行通信和调用的技术。其实现原理主要可以分为以下几个步骤&…

HTML前端页面设计静态网站-仿百度

浅浅分享一下前端作业&#xff0c;大佬轻喷~ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>百度&#xff08;伪&#xff09;</title><style>body {margin: 0;padding: 0;}.top-bar {dis…

Linux多线程(个人笔记)

Linux多线程 1.Linux线程概念1.1线程的优点1.2线程的缺点 2.Linux线程VS进程3.Linux线程控制3.1创建线程3.2线程tid及进程地址空间布局3.3线程终止3.4线程等待 4.分离线程5.线程互斥5.1互斥锁mutex5.2互斥锁接口5.3互斥锁实现原理5.4可重入VS线程安全 6.线程同步6.1条件变量6.2…

【MacOS实操】如何基于SSH连接远程linux服务器

MacOS上远程连接linux服务器&#xff0c;可以使用ssh命令pem秘钥文件连接。 一、准备pem秘钥文件 如果已经有pem文件&#xff0c;则跳过这一步。如果手上有ppk文件&#xff0c;那么需要先转换为pem文件。 macOS 的默认 SSH 客户端不支持 PPK 格式&#xff0c;你需要将 PPK 文…

基于CNN-LSTM的时间序列数据预测,15个输入1个输出,可以更改数据集,MATLAB代码

1. 数据收集与预处理 数据清洗&#xff1a;处理缺失值、异常值等。特征工程&#xff1a;提取有助于预测的特征。数据标准化&#xff1a;将时间序列数据标准化&#xff0c;使其具有零均值和单位方差&#xff0c;有助于模型训练。滑动窗口划分&#xff1a;将时间序列数据划分为多…

win 查看显卡支持 CUDA版本

在cmd 中执行 nvidia-smi 二、nvcc -V

Java算法OJ(6)归并分治

目录 1.前言 2.正文 2.1归并分治的概念 2.2计算数组的小和 2.2.1题目 2.2.2示例 2.2.3代码 2.3翻转对 2.3.1题目 2.3.2示例 2.3.3代码 3.小结 1.前言 哈喽大家好吖&#xff0c;今天继续来给大家带来Java算法——归并分治的讲解&#xff0c;学习这篇的前提可以先把…

QML项目实战:自定义Combox

目录 一.添加模块 import QtQuick.Controls 2.4 import QtQuick.Templates 2.4 as T import QtGraphicalEffects 1.15 import QtQuick 2.15 as T2 二.自定义Combox 1.combox文字显示 2.设置下拉图标显示 3.下拉框中选中背景设置 4.下拉框中选中文字设置 5.下拉框设置…

招聘系统哪个最好用?

在当今竞争激烈的商业环境中&#xff0c;企业为了保持竞争优势&#xff0c;对人才的需求愈发迫切。然而&#xff0c;面对海量的简历和繁杂的招聘流程&#xff0c;如何高效、精准地找到合适的人才&#xff0c;成为许多企业面临的难题。招聘系统因此应运而生&#xff0c;为企业提…