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

LinkedList源码解读

这里写目录标题

    • 简介
    • 源码解读
      • 基础变量
      • 构造函数
        • LinkedList()
        • LinkedList(Collection<? extends E> c)
    • 总结

简介

LinkedList 是对 Java 集合框架中 List 接口的一种具体实现,归属于线性数据结构的范畴。其核心内部结构是通过双向链表(double-linked list)来实现的,这使得它在元素插入、删除操作上具备较高的效率,尤其是在列表的首尾进行操作时。

相较于数组实现的列表,如 ArrayList,LinkedList 在非索引访问或遍历操作上可能效率较低。

LinkedList 类继承自 AbstractList 抽象类,并且实现了 List 接口以及标记接口 Serializable。通过实现 Serializable 接口,ArrayList 集合的实例能够支持序列化过程,从而允许对象的状态被转换成可以存储或传输的形式,用于网络传输或保存到文件等。


源码解读

基础变量

// 记录元素个数
transient int size = 0;// 当前节点的前一个结点
transient Node<E> first;// 当前节点的后一个结点
transient Node<E> last;// 初始化结点
private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}
}

构造函数

LinkedList()

构造一个空链表。

public LinkedList() {}
LinkedList(Collection<? extends E> c)

传入一个 Collection 的子类集合,将元素存储到 LinkedList。

public LinkedList(Collection<? extends E> c) {this();addAll(c);
}
  1. addAll©
public boolean addAll(Collection<? extends E> c) {// size:链表长度,这里作为开始添加新元素的位置return addAll(size, c);
}
  1. addAll(size, c)
public boolean addAll(int index, Collection<? extends E> c) {// 判断 index 是否超出范围(index >= 0 && index <= size)checkPositionIndex(index);// 将集合转为数组Object[] a = c.toArray();int numNew = a.length;    // 数组长度if (numNew == 0)return false;// 初始化前结点、后结点Node<E> pred, succ;// 如果index == size,说明实在链表的末尾添加,后继节点为null,前驱节点为最后一个节点if (index == size) {succ = null;pred = last;} else {// 否则,找到指定索引位置的节点,作为后继节点,并找到其前驱节点succ = node(index);pred = succ.prev;}// 遍历数组a,将每个元素添加到链表中for (Object o : a) {@SuppressWarnings("unchecked") E e = (E) o;// 创建新节点,前驱为pred,元素为e,后继为null(暂时)Node<E> newNode = new Node<>(pred, e, null);// 如果前驱节点为null,说明新节点是第一个节点if (pred == null)first = newNode;// 否则,将新节点链接到前驱节点的后面elsepred.next = newNode;pred = newNode;}// 如果后继节点为null,说明是在链表末尾添加,更新最后一个节点为predif (succ == null) {last = pred;} // 否则,将新添加的最后一个节点链接到原来的后继节点else {pred.next = succ;succ.prev = pred;}// 更新链表的大小size += numNew;modCount++;  // 修改次数return true;
}

总结

数据结构底层结构线程安全执行效率
ArrayList可变数组 Object[] elementData线程不同步、不安全查询效率搞、增删效率低
LinkedList双向链表线程不同步、不安全增删效率搞、查询效率低

相关文章:

LinkedList源码解读

这里写目录标题 简介源码解读基础变量构造函数LinkedList()LinkedList(Collection<? extends E> c) 总结 简介 LinkedList 是对 Java 集合框架中 List 接口的一种具体实现&#xff0c;归属于线性数据结构的范畴。其核心内部结构是通过双向链表&#xff08;double-linke…...

springboot feign-httpclient 连接池配置

在默认情况下 spring cloud feign 在进行各个子服务之间的调用时&#xff0c;http组件使用的是jdk的HttpURLConnection&#xff0c;没有使用线程池。有2种可选的线程池&#xff1a;HttpClient 和 OKHttp 在Spring Boot项目中使用Feign并配置HttpClient连接池&#xff0c;你需要…...

电汽车充电革命:充电桩的过去现在与未来

电动汽车充电革命&#xff1a;中国充电桩行业的过去、现在与未来 一、发展历程概述 中国充电桩行业的发展历程可划分为以下几个阶段&#xff1a; 1. 初始期&#xff08;2006-2008年&#xff09;&#xff1a;在此阶段&#xff0c;国家队主导市场&#xff0c;主要参与者包括国…...

windows server 2019中安装.net framework 3.5功能出错

转自金蝶云社区|财务金融企业信息化|IT精英人脉圈子-金蝶云社区官网 [故障现象] Windows server 2019系统安装net framework3.5时默认情况下会出现报错,提示错误:error 0x800F0954。 问题说明: 根据网上资料尝试了几种方式都不行: (1)离线下载net framework3.5进行安装(不…...

vscode gitlens收费破解

首先打开vscode 插件栏 搜索GitLens 找到对应插件 这里我已经安装完成&#xff0c;如果未安装的点击install 并且下载指定版本V15.1.0 不然后续操作 不生效 找到对应面板 点击查看GitLens 安装完成后&#xff0c;并不能立即使用 显示一下内容&#xff0c;需要付费 这里很关键&…...

IPv 4

IP协议 网络层主要由IP&#xff08;网际协议&#xff09;和ICMP&#xff08;控制报文协议&#xff09;构成&#xff0c;对应OSI中的网络层&#xff0c;网络层以实现逻辑层面点对点通信为目的。目前应用最广泛的IP协议为IPv4 基本概念给出 主机&#xff1a;配有IP地址但不具有路…...

SQL 注入漏洞 - 学习手册

0x01&#xff1a;SQL 注入前导知识 0x0101&#xff1a;SQL 注入 —— MySQL 数据库概述 知识速查&#xff1a;SQL 注入前导知识 SQL 注入 —— MySQL 数据库概述 获取数据库名 : select schema_name from information_schema.schemata;获取数据表名 : select table_name from …...

AVLTree 旋转笔记(根据平衡因子插入的公式,贼好理解)

平衡因子 avltree是一棵每个节点的左右子树的高度差不超过1的二叉树搜索树&#xff0c;对于avltree最重要的就是对平衡因子的控制。 对于旋转我们重点要注意的是三个节点&#xff0c;以左旋举例&#xff0c;需要注意的就是parent&#xff0c;subr&#xff0c;subrl。而旋转的方…...

STM32(十八):SPI通信

SPI通信&#xff1a; SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线 四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff09;、MOSI&#xff08;Master Output Slave Input&#xff09;主机输出从机输入、MISO&…...

Redis持久化机制(RDBAOF详解)

目录 一、Redis持久化介绍二、Redis持久化方式1、RDB持久化(1) 介绍(2) RDB持久化触发机制(3) RDB优点和缺点(4) RDB流程 2、AOF(append only file)持久化(1) 介绍(2) AOF优点和缺点(3) AOF文件重写(4) AOF文件重写流程 三、AOF和RDB持久化注意事项 一、Redis持久化介绍 Redis…...

蛋白质结构中pdbx_strand_id和entity_id相互转化

在蛋白质结构中,entity_id 和 pdbx_strand_id 表示的是不同的概念,涉及到不同层次的信息。 1. entity_id (实体 ID): 定义:entity_id 标识蛋白质结构中的一个“实体”(entity)。一个实体可以是一个多肽链、DNA 链、RNA 链,或者某些小分子(如辅因子、配体等)。特点:每…...

【父子线程传值TransmittableThreadLocal使用踩坑-及相关知识拓展】

文章目录 一.业务背景二.TransmittableThreadLocal是什么&#xff1f;三.问题复现1.定义注解DigitalAngel2.定义切面3.TransmittableThreadLocal相关4.线程池配置信息5.Controller6.Service7.测试结果8.问题分析9 解决办法及代码改造10.最终测试&#xff1a; 四.与 ThreadLocal…...

03 快乐树

快乐树 我们由题可以得出结论&#xff1a;一共有三种情况&#xff0c;但实际中第三中情况不存在。 证明第三中情况不存在&#xff1a; 我敲的代码 public boolean isHappy(int n) {int slown;int fastn;while(true) {int sum0;while(slow!0) {sum(slow%10)*(slow%10);slow/1…...

springboot+react实现移动端相册(上传图片到oss/ 批量删除/ 查看图片详情等功能)

相册页面及功能展示&#xff1a; react前端结构及代码&#xff1a; Java后端结构及代码 数据库结构&#xff1a; photo&#xff1a; user 这是首个利用AI自有知识构建的简易相册系统&#xff0c;项目是react构造前端spring boot构造后端。 前端有四个主要页面&#xff1…...

Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p37839 分析师&#xff1a;Kefan Yu 在大众旅游蓬勃发展的背景下&#xff0c;乡村旅游已成为推动乡村经济、社会和文化发展的关键力量。当前&#xff0c;乡村旅游接待设施主要以招待所、小宾馆和农家乐等形式存在。然而&#xff0c;一…...

Spring Boot驱动的交互式作业管理系统:师生共评功能实现

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…...

基于SSM的旅游网站【附源码】

基于SSM的旅游网站&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管理 5.1.2 …...

Python实现将目标文本批量存入Word,并将文本段落的开头进行缩进处理(11)

前言 本文是该专栏的第11篇,后面会持续分享Python办公自动化干货知识,记得关注。 在用python对目标文本进行批量自动化操作的时候,你可能会遇到这样的需求——“现有大批量的文本内容,需要通过python将其批量存入docx(word)文档中,而且每个段落的开头需要进行缩进处理”…...

el-select 下拉框选项文字过长解决方案

首先给下拉框设置类名&#xff0c;即popper-class属性&#xff0c;并且给el-option增加title属性 <el-selectv-model"item.portrayalItem"v-loadmore"{ method: lazyItemList, item, index }"multiplefilterableremotepopper-class"dropDown-sele…...

C语言基础语法——类型转换

数据有不同的类型&#xff0c;不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种&#xff1a; 自动类型转换&#xff08;隐式转换&#xff09;&#xff1a;遵循一定的规则&#xff0c;由编译系统自动完成强制类型转换&#xff08;显示转换&#xff09;…...

若依前后端分离系统生产环境部署:从零到上线的保姆级教程

若依前后端分离系统生产环境部署实战指南 引言&#xff1a;为什么选择若依框架&#xff1f; 对于刚接触企业级开发的新手来说&#xff0c;若依(RuoYi)框架无疑是一个绝佳的起点。这个基于Spring Boot和Vue.js的前后端分离架构&#xff0c;不仅提供了完善的权限管理、代码生成等…...

Artisan咖啡烘焙专业级工具实战指南:从数据驱动到精准控制

Artisan咖啡烘焙专业级工具实战指南&#xff1a;从数据驱动到精准控制 【免费下载链接】artisan artisan: visual scope for coffee roasters 项目地址: https://gitcode.com/gh_mirrors/ar/artisan Artisan作为一款开源咖啡烘焙可视化软件&#xff0c;为专业烘焙师提供…...

CosyVoice Docker Compose 中 model_id 的高效配置与优化实践

最近在部署 CosyVoice 语音服务时&#xff0c;我发现 docker-compose.yml 文件里的 model_id 配置项&#xff0c;虽然看起来只是简单的一行&#xff0c;但配置得当与否&#xff0c;直接关系到整个服务的部署效率、启动速度和资源开销。如果随便填一个值&#xff0c;或者不理解其…...

别再只盯着标定板了!用ROS camera_calibration搞定海康工业相机,这5个细节决定成败

工业相机标定进阶指南&#xff1a;ROS camera_calibration的五个关键优化点 工业相机的标定质量直接决定了机器视觉系统的测量精度。许多开发者虽然能够完成基础标定流程&#xff0c;却常常在参数解读和精度优化环节遇到瓶颈。本文将深入解析ROS camera_calibration工具在实际工…...

终极RPG Maker解密工具:3分钟学会提取游戏资源

终极RPG Maker解密工具&#xff1a;3分钟学会提取游戏资源 【免费下载链接】RPGMakerDecrypter Tool for extracting RPG Maker XP, VX and VX Ace encrypted archives. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter 还在为RPG Maker加密文件无法提取…...

科研绘图没美术功底?只需这一招

相信很多科研同仁都有过这样的痛点&#xff1a;明明实验数据很漂亮&#xff0c;创新点也足够突出&#xff0c;却因为一张制作粗糙、配色杂乱的插图&#xff0c;让论文的整体质量大打折扣。甚至在一些高水平期刊的审稿过程中&#xff0c;精美的图像往往能给审稿人留下更好的第一…...

深度学习赋能国税局发票查验:中英文混合验证码的高效识别方案

1. 验证码识别的税务场景痛点 每次打开国税局网站查验发票时&#xff0c;那个扭曲变形的中英文混合验证码是不是让你特别头疼&#xff1f;作为财务人员&#xff0c;我每天要处理上百张发票&#xff0c;手动输入这些验证码不仅效率低下&#xff0c;还容易出错。传统OCR技术在这里…...

OpenClaw隐私保护方案:ollama-QwQ-32B本地化数据处理流程

OpenClaw隐私保护方案&#xff1a;ollama-QwQ-32B本地化数据处理流程 1. 为什么需要本地化隐私保护方案 去年我在处理一份涉及客户隐私的市场分析报告时&#xff0c;遇到了一个棘手问题&#xff1a;当使用云端AI服务进行数据清洗和分析时&#xff0c;不得不将包含敏感字段的原…...

Crystals Kyber算法实战:5分钟搞定密钥封装机制(KEM)配置

Crystals Kyber算法实战&#xff1a;5分钟搞定密钥封装机制&#xff08;KEM&#xff09;配置 在当今数字安全领域&#xff0c;后量子密码学正从理论走向工程实践。作为NIST后量子密码标准化项目的优胜算法&#xff0c;Kyber以其高效的格基加密机制&#xff0c;正在重构密钥分发…...

重塑前端图片处理流程:compressorjs的高效压缩技术突破之路

重塑前端图片处理流程&#xff1a;compressorjs的高效压缩技术突破之路 【免费下载链接】compressorjs compressorjs: 是一个JavaScript图像压缩库&#xff0c;使用浏览器原生的canvas.toBlob API进行图像压缩。 项目地址: https://gitcode.com/gh_mirrors/co/compressorjs …...