首页 > 编程语言 >LinkedList 源码阅读

LinkedList 源码阅读

时间:2023-07-10 11:22:33浏览次数:37  
标签:Node index LinkedList pred next 源码 阅读 newNode prev

LinkedList 源码阅读

LinkedList是通过实现链表从而进行存储的,其有私有内部类 Node,通过泛型,从而实现储存各种类型对象。

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;
     }
 }

构造器

无参数构造方法

public LinkedList() {
   }

带参数的构造方法

构造方法通过调用该方法进行创建的

public boolean addAll(int index, Collection<? extends E> c) {
    // 检测索引
     checkPositionIndex(index);

     Object[] a = c.toArray();
     int numNew = a.length;
     if (numNew == 0)
         return false;
     Node<E> pred, succ;
     // 再当前数据后添加
     if (index == size) {
         succ = null;
         pred = last;
     } else {
         succ = node(index);
         pred = succ.prev;
     }
     // 循环添加
     for (Object o : a) {
         @SuppressWarnings("unchecked") E e = (E) o;
         Node<E> newNode = new Node<>(pred, e, null);
         if (pred == null)
             first = newNode;
         else
             pred.next = newNode;
         pred = newNode;
     }
     // 绑定做成一条链
     if (succ == null) {
         last = pred;
     } else {
         pred.next = succ;
         succ.prev = pred;
     }

     size += numNew;
     modCount++;
     return true;
 }

常用方法

linkFirst(E e)

添加的基本方法

/**
 * Links e as first element.
 */
private void linkFirst(E e) {
    final Node<E> f = first;
    final Node<E> newNode = new Node<>(null, e, f);
    first = newNode;
    // 通过判断是否有上一级 为空
    if (f == null)
        last = newNode;
    else
        f.prev = newNode;
    size++;
    modCount++;
}

node(int index) 查找

/**
 * Returns the (non-null) Node at the specified element index.
 */
Node<E> node(int index) {
    // assert isElementIndex(index);

    if (index < (size >> 1)) {
        Node<E> x = first;
        for (int i = 0; i < index; i++)
            x = x.next;
        return x;
    } else {
        Node<E> x = last;
        for (int i = size - 1; i > index; i--)
            x = x.prev;
        return x;
    }
}

常见问题

标签:Node,index,LinkedList,pred,next,源码,阅读,newNode,prev
From: https://www.cnblogs.com/jiuxialb/p/17540468.html

相关文章

  • A011 《千变万化》编程 源码
    一、课程介绍本节课用嵌套for循环、input()获取用户输入、int()转换为整数类型,绘制一个由正多边形组成的花朵。二、重难点解析数据类型数据有类型区分,常用的有整数类型和字符串类型。像10、37、-17、0等数字就是整数类型;而'3'、'27'、'一语惊醒梦中人'、'yyjxmzr'等被引号......
  • 【从0开始编写webserver·基础篇#03】TinyWeb源码阅读,还是得看看靠谱的项目
    【前言】之前通过看书、看视频和博客拼凑了一个webserver,然后有一段时间没有继续整这个项目现在在去看之前的代码,真的是相当之简陋,而且代码设计得很混乱,我认为没有必要继续在屎堆上修改了,于是开始阅读别人的较为规范的开源实现目的是尝试理解一个可用级别的webserver需要具备哪......
  • ThreadLocal源码
    使用场景ThreadLocal用来提供线程局部变量。每个线程都会有一份独立的副本,副本之间不存在竞争关系,是线程专属的内存空间。例如:publicclassThreadLocalTest{privatestaticfinalThreadLocal<Integer>threadLocal=newThreadLocal<>();publicstaticvoidma......
  • Qt源码阅读(五)-deleteLater
    QtdeleteLater作用及源码分析个人经验总结,如有错误或遗漏,欢迎各位大佬指正......
  • 所有源码关注公众号获取
    一、所有源码获取方法:1.关注公众号->商业项目->杂货铺->cv视觉源码;2.根据关键字搜索项目二、项目合作、学生毕设:1.专业的团队,985毕业,大厂工作;2.专业的服务,支持答疑;        公众号:                    个人号: ......
  • 基于MFC dll实现C++/CLI dll组件全过程详解(附完整源码) 浮云绘图
    ​模块化组件化实现独立的功能模块是软件设计的良好习惯,一般用实现为DLL。普通的DLL对外提供接口是采用导出函数接口,如果接口数量不大,只是50个以内,这种方式很适合;如果对外接口有上百个,导出函数接口就完全破坏了软件模块化分层设计的理念,使用接口非常麻烦,此情形采用C++/CLI导出类......
  • 透明信息提示框CFyToolTip设计及源码 适用于各类绘图的实时信息展示
    在图形绘制领域,经常需要用到透明的信息提示窗口,比如当鼠标移动到一个图元上,显示该图元对象的实时数据(如设备名称、状态、实测数据等),当鼠标移开,及时隐藏该提示框;比如在曲线控件绘图时,随着鼠标移动,实时展示曲线对应的横纵坐标值等​ 各种通用开发库里,也有类似的控件,如C#WinFor......
  • 多子曲线的曲线组件源码定制之详细功能需求,适用工控、军工、金融等数据分析领域 浮云E
    ​ 前文已经详细介绍了通用曲线控件源码定制开发从需求到编码实现,具体可参阅 通用曲线控件源码定制之设计实现篇 和 通用曲线控件定制之重点难点篇(附源码),本文由浮云E绘图开启大项目多曲线海量数据的曲线组件分析和实现之路。 一、需求背景在一些工业控制领域,有大量设备采......
  • 通用曲线控件定制之重点难点篇(附源码,功能丰富灵活) 浮云E绘图
    ​ 上篇已经介绍通用曲线控件源码定制之设计实现,详细描述了通用曲线控件的功能部件及其结构关系,并且实现了核心类的源码,本文由浮云E绘图继续介绍通用曲线控件定制开发的重点和难点,并附完整源码。 一.曲线控件源码类使用流程根据上文通用曲线控件源码定制之设计实现篇可知曲......
  • 小白PDF阅读器开发-页面元素分割
    以前用手机看PDF格式的电子书时,总感觉非常别扭,PDF格式的电子书在手机上缩放严重,字体太小,想看清楚得来回放大拖动,看书的兴致就在来回缩放拖动间被消耗没了!每次用手机看PDF电子书时就想着得做款能自动重排版的阅读器给我自己用。但是第一步就难住了,怎么分割页面元素?后来偶然间看到一......