zoukankan      html  css  js  c++  java
  • 【Java集合】LinkedList详解中篇

    这是关于LinkedList的第二篇文章,我将会源码分析LinkedList的部分重要代码,关键地方我都有注释说明,希望大家能比较明白的看懂!

    分析源码按照顺序分析:

    • 变量
    • 构造方法
    • 方法

    一、变量

    注意:如果一个链表没有节点,那么first和last都为null

    二、构造方法

    三、方法

    1、linkFirst(E e)

    方法描述:将e这个节点加入链表头

    注意:

    • 头节点的pre指针指向的是null,并没有指向尾节点,所以并不是循环双向链表。
    • 如果当前链表只有一个节点,那么first和last指针均指向该节点

    2、linkLast(E e)

    方法描述:将e这个节点加入链表尾

    注意:

    • 尾节点的next指针指向的是null,并没有指向头节点,所以并不是循环双向链表。
    • 如果当前链表只有一个节点,那么first和last指针均指向该节点

    3、linkBefore(E e, Node succ)

    方法描述:将e这个节点加入到不为空的succ节点之前

    注意:

    • 该方法是往【succ节点】前加节点,所以需要判断该节点是否是头节点,原因是需要更改first这个指针指向的节点

    步骤:

    • 构造新的节点,它的prev指向【succ节点】的前一个节点,它的next指向【succ节点】
    • 【succ节点】的prev指向新的节点
    • 【succ节点】的前一个节点的next指向新节点

    4、unlinkFirst(Node f)

    方法描述:去掉不为空的头节点

    注意:

    • 如果【f节点】不是头结点,那么【f节点】之前【包括f节点】都将从链表中断开丢掉,只是size的减一存在问题

    步骤:

    • first指针指向【下一个节点】
    • 【f节点】的next不再指向【下一个节点】

    5、unlinkLast(Node l)

    方法描述:去掉不为空的尾节点

    注意:

    • 如果【l节点】不是尾结点,那么【尾节点】之后【包括l节点】都将从链表中断开丢掉,只是size的减一存在问题

    步骤:

    • last指针指向【上一个节点】
    • 【上一个节点】的next指向null

    6、unlink(Node x)

    方法描述:去掉不为空的【x节点】

    步骤:

    • 【上一个节点】的next指针指向【下一个节点】,【x节点】prev指向null
    • 【下一个节点】的prev指针指向【上一个节点】,【x节点】next指向null

    7、简单方法的概括

    8、add(E e)

    方法描述:向链表插入1个元素

    注意:

    • add方法默认是加元素加入【尾节点】

    9、remove(Object o)

    方法描述:移除链表中某个节点

    注意:

    • 这里判断了【被移除元素】是否为null的情况,为空则==即可,如果不为null,则需要equals来判断是否相等
    • == 和 equals的区别小伙伴们有兴趣可以查一查

    10、addAll

    方法描述:添加新的节点到链表中

    11、clear()

    方法描述:清除链表

     

  • 相关阅读:
    波场TRX 钱包开发,看这篇就够了
    比特币(BTC)钱包对接之如何实现平台用户注册地址生成?
    如何搭建泰达币(USDT)钱包节点?
    交易所如何对接狗狗币(DOGE)钱包?这点不可忽视
    【转】影响加密数字货币交易情绪有哪些?如何控制?
    探寻DOT充提币接口对接流程
    你需要PCIE×4硬盘
    安装rename perl version
    Emacs-log
    Biopython Numpy 安装问题
  • 原文地址:https://www.cnblogs.com/yanphet/p/10385462.html
Copyright © 2011-2022 走看看