List实现(2)| LinkedList

参考:LinkedList 源码分析

在Java中,LinkedList是一个双向链表,实现了ListDeque接口,可以被当作列表(List)、队列(Queue)或者双端队列(Deque)使用。它允许对元素进行高效的插入、删除操作,同时也支持随机访问。

不过,我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且,性能通常会更好!就连 LinkedList 的作者约书亚 · 布洛克(Josh Bloch)自己都说从来不会使用 LinkedList

底层结构

LinkedList 底层使用的是 双向链表 数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环。)

二者对比可以看出,双向循环链表的特点在于,最后一个节点的next指向第一个节点,而第一个节点的prev指向最后一个节点。

基本操作

  • 添加到尾部(addLast(e):O(1),因为只需要更新tail节点的引用。
  • 添加到头部(addFirst(e):O(1),同样只需要更新head节点的引用。
  • 在指定位置添加(add(int index, e):O(n),因为需要遍历链表到指定位置。

  • 删除尾部元素(removeLast():O(1),直接更新tail节点的引用。
  • 删除头部元素(removeFirst():O(1),直接更新head节点的引用。
  • 删除指定位置的元素(remove(int index):O(n),因为需要遍历到指定位置。
  • 删除任意元素(remove(Object o):O(n),需要遍历链表以查找对象。

  • 修改指定位置的元素(set(int index, e):O(n),需要先找到指定位置的元素,然后进行替换。

  • 查询指定位置的元素(get(int index):O(n),因为需要从头或尾部开始遍历到指定位置。
  • 查找特定元素的索引(indexOf(Object o):O(n),需要遍历链表以查找特定元素。

注意事项

  • 由于LinkedList不是基于数组实现,所以它不保证在迭代过程中的快速随机访问。如果需要频繁地进行随机访问,ArrayList可能是更好的选择。
  • 在进行大量添加操作时,LinkedList的性能可能不如ArrayList,因为数组的扩容操作相对较少,而链表需要频繁地更新节点的引用。
  • 在需要频繁进行插入和删除操作的场景下,LinkedList是一个非常好的选择,尤其是在对列表中间元素进行操作时。

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

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

相关文章

简单3步制作纸质英语绘本的mp3英语朗读音频

孩子学英语,需要看很多英语绘本,而且要听配套的音频。但有些英语绘本是没有对应音频的,下面简单三步,就可以将任意英语绘本制作出对应的英语朗读音频。 第一步,手机拍照做成PDF文件: 绘本每一页拍照后&…

第三方软件测评报告测试内容详解

随着信息技术的迅猛发展,软件产品在各行各业的应用越来越广泛。为了确保软件产品的质量和性能,第三方软件测评报告成为了不可或缺的一环。那么,第三方软件测评报告测试内容究竟包括哪些呢?本文将从多个方面进行详细解析。 一、功…

解决IDEA https://start.spring.io/连接不上

1.换成下边这个地址试试 https://start.springboot.io/2.换成阿里云试试,绝对可行,但是版本有点低 https://start.aliyun.com

【C++]C/C++的内存管理

这篇博客将会带着大家解决以下几个问题 1. C/C内存分布 2. C语言中动态内存管理方式 3. C中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原理 6. 定位new表达式(placement-new) 1. C/C内存分布 我们先来看下面的一段代码和相关问题 int global…

Cesium实现加载离线地形数据(nginx发布数据,cesiumLab地形切片数据)

实现效果如图: 详细步骤 1 下载地形数据(DEM) 下载地址:地理空间数据云 (gscloud.cn) 操作步骤: 注意:第3步可以自主选择DEM的分辨率,然后下载。 下载结果解压后如下图: 2 使用…

excel里如何的科学计数法的数字转换成数值?

比如下图,要想把它们转换成3250跟1780,有什么快捷的办法吗? 科学计数法在excel里的格式,与我们常规在数学上写的有差异。这个转换可以这样做: 1.转换后的效果: 2.问题分析 题目中所附截图,单元…

vue3.0项目生成标签条形码(插件:jsbarcode)并打印(插件:Print.js)支持pda扫码枪扫描

文章目录 功能场景生成条形码设置打印功能踩坑 功能场景 功能场景:供应链中对一些货品根据赋码规则进行赋码,赋码之后生成根据赋码结果生成条形码,执行打印功能,贴在货品之上,打印之后可以用pda的手枪进行扫描&#x…

从AdTech转战Martech,驰骛科技的PaaS之路

中国最早的Adtech公司之一,在被全资收购后,其创始团队又创立了一家Martech公司。赛道的变更也从侧面反映出中国营销技术市场的发展轨迹。 驰骛科技创始团队来自易传媒核心团队,驰骛科技创始人程华奕是易传媒创始人兼CTO,是中国最早…

现在给政府机关医院学校部队供货的方式有哪些?

给政府机关、医院、学校和部队供货的方式主要包括以下几种: 直接采购:政府机关、医院、学校和部队通过招标或直接与供应商进行谈判,确定采购的产品和价格。这种方式常见于大宗或重要物资的采购,能够确保采购过程的透明度和公正性…

使用 Citavi 和 NVivo 简化您的文献综述和研究分析

NVivo 是一款支持定性研究方法和混合研究方法的软件。它可以帮助您收集、整理和分析访谈、焦点小组讨论、问卷调查、音频等内容。NVivo(1.0版)是Windows和Mac的主要版本。遵循最新的主要版本NVivo 12(Windows和Mac)。 NVivo 强大…

Linux服务器硬件及RAID配置

一、服务器硬件 塔式服务器:最初的服务器形态之一,类似于传统的台式电脑,但具有更强的处理能力和稳定性,适合小型企业或部门使用。 机架式服务器:设计为可安装在标准化机架内的模块化单元,可以有效地节省空…

jetson nx 外接按钮,实现开机功能

本文参考自https://blog.csdn.net/m0_59584375/article/details/128050175 首先第一步,要短接jetson nx背面的AUTO ON 和DISABLE引脚 可以用跳帽短接,也可以直接用一根杜邦线连接这两个针脚 AUTO ON 和DISABLE引如下图红色圈 跳帽的样子如下图 我是直…

Mabtech:与结核病相关的肽库

Mabtech 新研发出了三个涵盖结核蛋白(EspC、ESAT-6、CFP-10)的肽库,可以区分潜伏性结核病和活动性结核病的区别。所有肽库都经过验证,都可用于ELISpot、FluoroSpot实验。 1. EspC scanning pool ● EspC scanning pool包含来自结…

42-软件部署实战(下):IAM系统安全加固、水平扩缩容实战

IAM应用安全性加固 iam-apiserver、iam-authz-server、MariaDB、Redis和MongoDB这些服务,都提供了绑定监听网卡的功能。将服务绑定到内网网卡上。 我们也可以通过iptables来实现类似的功能,通过将安全问题统一收敛到iptables规则,可以使我…

速看!2024中国(厦门)国际康复医疗展览会

2024中国(厦门)国际康复医疗展览会 2024 China (Xiamen) International Rehabilitation Medical Exhibition 时 间:2024年8月13-15日 August 13-15, 2024 地 点:厦门国际会展中心 Xiamen International Conference & Exh…

Java工具类:批量发送邮件(带附件)

​ 不好用请移至评论区揍我 原创代码,请勿转载,谢谢! 一、介绍 用于给用户发送特定的邮件内容,支持附件、批量发送邮箱账号必须要开启 SMTP 服务(具体见下文教程)本文邮箱设置示例以”网易邮箱“为例,其他如qq邮箱或企业邮箱均可,只要在设置中对应开启SMTP及授权码等操…

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day11】 —— MyBatis1

市面上主流ORM框架: EJB:重量级、高花费的ORM技术,支持JPA,尤其是EJB3低侵入式 的设计,增加了Annotation Hibernate:开源,支持JPA ,被选作JBoss的持久层解决方案 iBatis:”SQL Mappi…

SpringBoot多数据源配置之事务管理

SpringBoot多数据源配置之事务管理 1.Spring编程式事务1.1 简单案例 2.mybatis多数据源事务2.1 简单mybatis项目结构2.2 application.yml配置2.3 读写数据源配置 3.测试 1.Spring编程式事务 Spring编程式事务是一种通过编写具体代码来实现事务管理的方式。 在编程式事务中, 开…

如何用ChatGPT进行论文撰写?

原文链接:如何用ChatGPT进行论文撰写?https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601619&idx1&snb686fbe87dedfac2df3a6afe780b2ffe&chksmfa820c34cdf5852251dca64597024ea62ddbde280086535ec251f4b62b848d9f9234688384e6…

vim使用指南:指令、配置、插件、异常

文章目录 vi / vim命令模式插入模式光标定位复制粘贴删除撤销替换删除查找 底行模式保存退出行号查找多开其他 视图模式注释 异常vim配置vim插件 vi / vim vim的本质是一个编辑器,是一种多模式的编辑器,只能进行读写操作,不能进行编译编辑器…