首页 > 编程语言 >Java集合 —— LinkedList详解(源码)

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

时间:2025-01-05 12:12:50浏览次数:1  
标签:Node 结点 Java LinkedList 链表 源码 last null

在学习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)

头插法

在指定位置插入

标签:Node,结点,Java,LinkedList,链表,源码,last,null
From: https://www.cnblogs.com/codyxz/p/18653240

相关文章

  • flask框架网上图书商城毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于网上图书商城的研究,现有研究多集中于整体电商模式或者传统图书销售转型等方面1,专门针对网上图书商城系统功能(如用户、卖家、图书......
  • flask框架食物营养数据分析系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于食物营养数据分析系统的研究,现有研究多侧重于食物营养本身的分析,如营养成分的测定等方面,而专门针对食物营养数据进行系统分析并构......
  • 基于语音识别的分类垃圾桶设计(论文+源码)
    1系统整体方案设计本次课题为基于语音识别的分类垃圾桶系统设计,在此将功能设计如下:(1)设置3个垃圾桶,分别放置可回收物、厨余垃圾、其他垃圾;(2)通过语音识别模块与舵机模块,控制相应垃圾桶打开盖子,同时进行语音提醒;(3)开启垃圾桶后,延时5秒钟自动关闭;(4)超声波模块检测当前各桶内垃圾......
  • 【关注可白嫖源码】小说在线阅读系统,怎么设计这个系统呢,不会的看过来吧
    设计一个小说在线阅读系统的目的是为用户提供流畅、便捷的阅读体验,同时支持作者上传作品并进行管理。以下是详细的设计方案:1.系统架构设计前端技术:使用React或Vue.js开发用户界面,支持PC和移动设备的响应式设计。提供流畅的阅读界面,包括章节目录、翻页效果和阅读模式切换......
  • flask框架失踪人口寻找互助信息系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于失踪人口寻找问题的研究,现有研究多集中在传统寻人手段以及公安机关等官方机构的寻人流程方面[1][2] 。专门针对构建互助信息系统......
  • flask框架网上书店的设计与开发毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于网上书店的设计与开发问题的研究,现有研究主要集中在成熟平台的运营模式和市场推广方面1。专门针对从用户个性化需求、功能完善性......
  • 28 个 JavaScript 单行代码让你成为 JavaScript 大神
    1.反转字符串constreversedString=str=>str.split('').reverse().join('');reversedString("HelloWorld");//dlroWolleH此函数获取一个字符串,将其拆分为一个字符数组,反转该数组,然后将其重新合并为一个字符串,反转原始字符串。2.标题大小写字符串consttitle......
  • JavaScript 观察者模式:前端开发必备技能
    一、什么是观察者模式?        观察者模式(ObserverPattern),也称为发布-订阅模式(Publish/Subscribe),定义了一种一对多的依赖关系。当一个对象(被观察对象或主题Subject)的状态发生变化时,所有依赖于它的对象(观察者Observer)都会得到通知,并自动进行相应的更新。     ......
  • sql server版本太老,java客户端连接失败问题定位
    背景最近半路接手了一个系统的优化需求,这个系统有个遗留问题还没解决,随着新需求的上线,系统正式开放使用,这个遗留问题也必须解决。这个系统大概是下面这样的,支持录入各种数据源的信息(ip、端口、数据库种类、账号密码等):录入完成后,可以查看这些数据源中的表、表的ddl、表中的列(列......
  • java卷上天,转行可以干什么?
    ......