LinkedList(Java8)个人理解

news2025/1/8 4:56:29

问题:LinkedList 的 Node 怎么理解?

Node 是 LinkedList 的私有静态内部类,作为链表结构的基本元素,可以看作是链条上的一个节(结)点。一个 node 对象中除了存储元素的值外,还存储着前一个 node 和后一个 node 的引用。

问题:LinkedList 内部是怎么存放数据的?

LinkedList 对数据进行封装,在内部组装成 Node。LinkedList 由下面几个部分组成,主体为若干个 Node,首尾各一个 Node 的引用,一个记录 Node 个数的 size。前后的 Node 之间互相引用,构成双向链表。如果链表为空,first 和 last 都指向 null,如果链表中只有一个 Node,first 和 last 都指向这个 Node(first 和 last 都是这个 Node 的引用)。如果链表有多个 Node,first 和 last 分别指向链表首尾的 Node。对于每个 Node 来说,如果该 Node 前还有 Node,那么这个 Node 的 prev 指向前一个 Node,否则 prev 指向 null;如果该 Node 后还有 Node,那么这个 Node 的 next 指向后一个 Node,否则 next 指向 null。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHqRveea-1670756874922)(https://wenshixin.gitee.io/blog/2018/12/16/LinkedList%E4%B8%AA%E4%BA%BA%E7%90%86%E8%A7%A3/LinkList%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9B%BE.png)]

问题:LinkedList 是怎么进行查找的?

LinkedList 相比于 ArrayList 的优势在于插入和删除,劣势是查找,LinkedList 类使用双向链表一定程度上确实可以提高查找效

率。

LinedList 中的查询分为两种,一种是根据 index 查询 node(包含元素值),也即是 node() 方法,另一种是根据 object(元素值) 查询 index,也即是 indexOf() 方法。链表不像数组那样,可以根据 index 直接查询出元素的值,因为两者在内存种的结构是不一样的,数组存储在连续的内存空间,而链表存储不需要连续的内存空间。

链表中的 index 只是标记元素的相对于链表头部(first 指向的)node 的个数,这样在根据 index 查询时,可以根据 index 和 size 的关系,提高查询性能。当 index 大致在链表的前半部分时(index < (size >> 1)),从链表的首部开始遍历显然更快,而当 index 大致在链表的后半部分时(index > (size >> 1)),从链表的尾部开始遍历显然更快,这样就使得查找次数从 n 次将为了 n/2 次,虽然查找算法的时间复杂度还是 O(n)。

根据元素值来查找 node 的 index,使用的是 indexOf() 方法和 lastIndexOf() 方法,前一个方法是从前往后查找,后一个方法是从后往前查找。

问题:LinkedList 内部一些方法的区别?

LinkedList 内部有很多功能相同的方法,方法内部大多都是调用 link 相关的方法。

| LinkedList | 添加元素 | 删除元素 | 查看元素 |

| — | — | — | — |

| 作为链表 | add()、set() | unlink()、remove() | get() |

| 作为队列 | offer() | poll() | peek() |

| 作为栈 | push() | pop() | 无 |

问题:LinkedList 和 ArrayList 的区别
LinkedList 是基于双向链表实现的,ArrayList 是基于数组实现的。
LinkedList 添加、插入、删除元素速度更快,而 ArrayList 查询速度更快。
于数组实现的。
LinkedList 添加、插入、删除元素速度更快,而 ArrayList 查询速度更快。

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

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

相关文章

【软件测试】测试员vs测试工程师,你是测试员还是测试工程师?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 不是什么时候&#…

[Java] 序列化(Serialization)的本质是什么?在Java中怎么实现?为什么要了解序列化技术?序列化技术选型要点是什么?

文章目录前言序列化是什么&#xff1f;理解对象在内存中是如何存储的数据在进程内存中的分布图数据被序列化之后在内存中的分布图序列化/反序列化的本质&#xff1f;序列化在Java中的实现&#xff1f;1. JDK Serialization&#xff08;不推荐使用&#xff09;2. 第三方实现&…

本地完成Vue脚手架和Django建立连接

目录 在Vue中 setting.py中&#xff1a; urls.py中 首先把要连接的Django项目和Vue脚手架创建好 之后我们把整个Vue拖到Django的文件夹根目录下&#xff0c;于manage.py同级即可&#xff08;图中data-work为我的Vue&#xff09; 在Vue中 进入到vue.config.js文件夹下 添加as…

全栈Jmeter接口测试(三):jmeter利用察看结果树查看响应调试取样器(Debug Sampler),设置HTTP信息头管理器模拟请求头

Jmeter(5)&#xff1a;jmeter利用察看结果树查看响应&调试取样器(Debug Sampler) 察看结果树选项介绍&#xff1a; 名称&#xff1a;本属性用于标识一个察看结果树元件&#xff0c;建议使用一个有意义的名称 注释&#xff1a;对于测试没有任何作用&#xff0c;仅用户记录用…

初级西班牙语教程

初级西班牙语教程 通过使用我的简化方法变得会话和流利的完整指南学习西班牙语 课程英文名&#xff1a;Spanish Made Simple Beginner Spanish 此视频教程共28.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全 下载地址 课程编号&#xff…

MySQL MVCC详解

为什么需要MVCC 在没有MVCC之前&#xff0c;是使用读写锁&#xff08;共享锁/排它锁&#xff09;来进行并发控制的&#xff0c;读锁和读锁之间不互斥&#xff0c;写锁和读锁互斥&#xff0c;写锁和写锁互斥。 但是频繁加锁会导致数据库性能低下&#xff0c;这时出现了一种不加…

数字脉冲参数

脉冲幅度vm。脉冲电压波形变化的最大值&#xff0c;单位为伏&#xff08;v&#xff09;。脉冲上升时间tr。脉冲波形从0.1vm上升到0.9vm所需的时间。脉冲下降时间tf。脉冲波形从0.9vm下降到0.1vm所需的时间。 脉冲上升时间tr和下降时间tf越短&#xff0c;越接近于理想的短形脉冲…

Redis实战——Redisson分布式锁

目录 1 基于Redis中setnx方法的分布式锁的问题 2 Redisson 2.1 什么是Redisson 2.2 Redisson实现分布式锁快速入门 2.3 Redisson 可重入锁原理 什么是可重入锁&#xff1f; Redisson中又是如何实现的呢&#xff1f; 2.4 Redisson分布式锁的可重试性 2.5 Redisson分布式锁的主从…

【C语言经典题目】调整奇数偶数顺序、有序序列合并以及有序序列判断

目录 一、调整奇数偶数顺序 1.思路一&#xff08;使用多个数组&#xff09; ①使用两个数组&#xff08;双指针法&#xff09; ②使用三个数组 2.思路二&#xff08;不创建其他的数组&#xff0c;双指针&#xff09; 二、有序数组合并 1.思路一 2.思路二 三、有序序列判…

【springboot进阶】基于starter项目构建(二)构建starter项目-mysql

目录 一、创建 mysql-spring-boot-starter 项目 二、添加 pom 文件依赖 三、构建配置 1. mybatis-plus分页配置 MybatisPlusConfig 2. mybatis-plus代码生成器 CodeGenerator 四、加载自动化配置 五、打包 六、使用 这个系列讲解项目的构建方式&#xff0c;主要使用 父…

第二证券|事关A股!4万亿外资巨头最新研判

时值年末&#xff0c;在多重利好音讯提振下&#xff0c;我国股市迎来一波反弹&#xff0c;海外本钱大举加仓我国财物。下一年全球经济将走向何方&#xff1f;国内和海外商场又会有哪些变化&#xff1f;财物装备该怎样做&#xff1f;近期&#xff0c;联博资深商场策略师黄森玮、…

PyTorch - Cifar 数据集

文章目录项目说明cifar-10 数据集介绍代码实现构建数据集、加载器构建 卷积网络训练数据构建 VGG 加深网络训练测试项目说明 cifar-10 数据集介绍 cifar-10 数据集由 60000 张分辨率为 32x32 彩色图像组成&#xff1b; 共分为 10 类&#xff0c;每类包含 6000 张图像&#xff…

深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/128273593【三】深入理解mysql的索引分类&a…

odps创建周期任务及字符串与日期函数用法

odps简介 PB/EB级数据的离线存储(存储资源)及逻辑处理(计算资源)&#xff0c;集群可用性全托管。 MaxCompute(odps)是适用于数据分析场景的企业级SaaS&#xff08;Software as a Service&#xff09;模式云数据仓库&#xff0c;以Serverless架构提供快速、全托管的在线数据仓库…

[附源码]Python计算机毕业设计SSM基于的民宿租赁系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

STS安装反编译插操作

第一步&#xff1a;下载net.sf.jadclipse_3.3.0.ja离线插件 首先​​​​​​下载离线插件 JadClipse - Eclipse plugin download | SourceForge.netDownload JadClipse - Eclipse plugin for free. Jad Java decompiler plugin for Eclipse IDE.https://sourceforge.net/proj…

Java自定义注解实现

一、注解的定义和作用 1、定义   注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&…

51的原理图和pcb的注意事项及出现的问题与解决办法

本次总结基于立创eda的注意事项总结&#xff0c;如有疑问&#xff0c;欢迎交流。 1.焊盘设成地网络&#xff01;&#xff01;&#xff01;&#xff01; 2.pcb的基本步骤是布局---布线---泪滴---铺铜---缝合孔&#xff0c;记得泪滴和缝合孔!! 3.元器件的封装要选择贴片的 这样…

认识阻塞队列

认识阻塞队列一、相关概念1.1 阻塞队列是什么1.2 生产者消费者模型二、标准库中的阻塞队列2.1 使用2.2 生产者消费者模型实现三、实现阻塞队列3.1 循环队列3.2 实现的细节3.3 代码一、相关概念 1.1 阻塞队列是什么 阻塞队列是一种特殊的队列&#xff0c;也遵守 “先进先出” …

CENTOS上的网络安全工具(十六)容器特色的Linux操作

这一篇&#xff0c;我们继续在Docker上折腾。之前我们已经展示了如何在容器上搭建安全产品的部署环境&#xff0c;这里我们需要更进一步&#xff0c;讨论如何在容器上搭建开发与调试环境。这是学习安全产品并且自己构建安全产品的基础步骤。 〇、精简系统上的操作技巧 使用Dock…