Java集合 —— LinkedList详解(源码)

news/2025/1/7 8:17:07/文章来源:https://www.cnblogs.com/codyxz/p/18653240

在学习LinkedList之前先来了解一下链表

链表

概念

  链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序通过链表中的指针链接次序实现的

  图中的1、2、3、4、5都是结构体,称为结点;结构体包含所存的数据和下一结点的地址。顺序表中的地址是连续的,而链表中的地址是随机分配的

  • 头结点:在单链表的开始结点之前设立一个结点称之为头结点,头结点的数据域中可以不存放任何信息,也可以存放链表长度等附加信息,头结点的指针域指向存储指向第一个结点的指针

  • 头指针:链表中指向第一个结点的指针(无论链表是否为空,头结点都不为空)

  • 首元结点:第一个元素所在的结点,如果是带头链表,首元结点就是头结点后的第一个结点

分类

  • 单向链表

单向链表包含两个值,当前结点的值和指向下一个结点的链接

  • 双向链表

双向链表中有三个值,当前结点的值、向后的结点链接、向前的结点链接

  • 不带头

  • 带头

  • 循环

  • 非循环

LinkedList

  LinkedList底层是双向链表的存储结构,在LinkedList内部有sizefirstlast属性,以及一个内部类Node,在Node中又维护了itemnextprev

    transient int size = 0;/*** Pointer to first node.* Invariant: (first == null && last == null) ||*            (first.prev == null && first.item != null)*/transient Node<E> first;/*** Pointer to last node.* Invariant: (first == null && last == null) ||*            (last.next == null && last.item != null)*/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 继承了 AbstractSequentialList 类

  • LinkedList 实现了 Queue 接口,可作为队列使用

  • LinkedList 实现了 List 接口,可进行列表的相关操作

  • LinkedList 实现了 Deque 接口,可作为队列使用

  • LinkedList 实现了 Cloneable 接口,可实现克隆

  • LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable

添加

尾插法

相当于public void addLast(E e)

头插法

在指定位置插入

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

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

相关文章

菜单

扫雷菜单准备写一个基于C的扫雷游戏,这是第一篇,内容:扫雷的主菜单 思路 显示菜单->用户选择->判断用户选项 实现 显示菜单 首先在main函数内显示菜单,菜单显示部分实现在 MainMenu 函数内 int main(void) {while (true){int iChoose = -1;MainMenu();//加载菜单} } …

如何解决数据库扩容后宝塔面板显示旧容量的问题?

当您完成数据库扩容后,发现宝塔面板仍然显示旧的容量,这可能是由于系统未能及时刷新磁盘信息或配置文件未更新所致。为了确保宝塔面板正确显示新的磁盘容量,请参考以下详细步骤进行处理:确认磁盘扩容成功:首先,确保磁盘扩容操作已经成功完成。可以通过命令行工具如lsblk或…

20241312《计算机基础与程序设计》课程总结

20241312《计算机基础与程序设计》课程总结 第一周作业: 简要内容:①课程概论②工业革命与浪潮之巅③信息与信息安全④计算机系统概论⑤计算机安全⑥计算的限制⑦计算思维 二维码: 第三周作业: 简要内容:①数字分类与计数法 ②位置计数法③进制转换④模拟数据与数字数据⑤…

云服务器根目录扩容后磁盘空间未增加

问题描述: 我已经升级了云服务器的配置,但根目录的空间大小并未增加。请帮我检查并解决这个问题。 详情回答: 您好!感谢您使用我们的云服务器服务。根据您的描述,您已经升级了云服务器的配置,但根目录的空间大小并未增加。这种情况通常是由于磁盘挂载或分区设置不当引起的…

如何解决BT面板无法登录的问题?

当您遇到无法登录BT面板的情况时,可能是由多种原因引起的。以下是一些常见的排查步骤和解决方案,帮助您快速解决问题:检查用户名和密码:首先,确认您使用的用户名和密码是否正确。默认情况下,BT面板的登录用户名通常是 admin 或 cp,密码则是您在安装时设置的初始密码。如…

响应式设计进阶 - 修改网站手机版模板的实用方法与技巧

随着移动设备使用的增加,确保网站在小屏幕设备上有良好的用户体验变得至关重要。以下是关于如何修改网站手机版模板的一些基本指导和高级技巧:理解响应式设计理念响应式设计是一种使网页能够在不同设备上自适应的技术。它通过使用流式网格布局、弹性图片和媒体查询等手段,确…

Mingw64下载及各版本区别

地址:https://github.com/niXman/mingw-builds-binaries/releases 一般来说下这个就行

2025.1.5

Buy One, Get One Free 题解Buy One, Get One Free 题解One Last Kiss & Beautiful World 初めてのルーブルは なんてことはなかったわ 私だけのモナリザ もうとっくに出会ってたから 初めてあなたを見た あの日動き出した歯車 止められない喪失の予感 もういっぱいあるけれ…

如何删除不必要的DNS记录?

用户在管理域名解析时,遇到了一些不再需要的DNS记录,如TXT记录或CNAME记录,不确定是否可以删除这些记录。用户希望了解如何安全地删除这些记录,以及删除后是否会影响现有服务。 解决方案:问题 解决方案删除不必要的DNS记录 在确认不再需要特定DNS记录后,可以直接在域名解…

如何解决网站无法打开的问题

用户反馈其网站无法正常访问,具体表现为浏览器提示错误信息或页面加载失败。用户尝试了清除缓存、更换浏览器等操作,但问题依旧存在。 解决方案: 当遇到网站无法打开的情况时,首先需要确认是服务器端问题还是客户端问题。以下是详细的排查步骤:检查域名解析:确保域名正确…

20241309《计算机基础与程序设计》课程总结

目录 -第0周作业 -第1周作业 -第2周作业 -第3周作业 -第4周作业 -第5周作业 -第6周作业 -第7周作业 -第8周作业 -第9周作业 -第10周作业 -第11周作业 -第12周作业 -第13周作业 -第14周作业 每周作业链接汇总 第0周作业 自我介绍第1周作业 参考 基于VirtualBox虚拟机安装Ubuntu图…

升级服务器数据盘大小、内存和CPU是否会丢失数据

用户计划升级服务器的数据盘大小、内存和CPU,但担心这些操作会导致现有数据丢失。特别是对于网站程序和数据库文件的安全性表示担忧。 解决方案:问题 解决方案升级数据盘是否会丢失数据 正常情况下,升级数据盘不会导致数据丢失。只要按照正确步骤操作,原有数据将保持完整。…