美文网首页
JDK源码阅读之旅(二)——LinkedList

JDK源码阅读之旅(二)——LinkedList

作者: 张天偿 | 来源:发表于2017-08-25 11:10 被阅读0次

    LinkedList也是实现List接口的一个类,我用的比较少,现在要来好好学习下。

    先来看他的成员变量。

    List大小 头结点 尾结点

    再看看构造方法

    空的构造方法 将集合c放入LinkedList

    在看成员方法之前时首先看一下一个十分重要的内部类。

    Node类

    定义了一个Node类,并在其成员变量中指定next结点和prev结点。同时这些next结点和prev结点也是Node实例。

    接下来看LinkedList的成员方法。

    1.

    头部加入一个元素

    按照自己的理解画了个示意图,如下

    下面这个箭头表示转换过程

    然后要进行一个判断,如果f是空的话那么newNode就是尾结点,否则将newNode作为f的前置结点。

    2.

    尾部加入一个元素

    与在头部加入元素类似,如果l是空的话,那么newNode就变成了头结点,否则就将newNode作为l的后置结点。

    3.

    在某个结点之前插入新元素

    将新加入结点的前后指向改变即可。

    4.

    去掉头结点的方法

    去掉的是头结点f。定义f的成员变量item为element,next为next。再将二者置空值,至于回收的事情交给GC。然后把头结点改为之后的那个结点。最后返回的值是老的那个element。

    5.

    移除尾结点

    6.

    移除某个非空的结点

    如果移除结点x的前置结点是空,那么说明这个x就是头结点,所以后面那个结点变成头结点。反之将前置结点的next指向后面那个结点,同时将x的前置结点置空。后面那一步同理。最后将item置空,返回老的element。

    7.

    获取首个元素值的方法

    因为有头结点这个成员变量,所以第一个元素很好取得。

    8.

    获取尾结点同理

    9.

    删除头结点的方法

    其实就是调用刚才那个unlinkFirst方法。

    10.

    删除尾结点方法

    11.

    添加头结点的方法(外部的)

    12.

    添加尾结点的方法(外部的)

    13.

    是否包含某个对象

    主要看indexOf方法。

    14.

    返回大小

    15.

    默认的add方法是在最后加入元素的

    16.

    删除某个元素的方法

    和ArrayList相同,删除的也是第一个出现的元素。通过链表的循环进行搜索。

    17.

    弹出第一个结点的元素

    和getFirst不同的是,peek碰到空结点会返回null,而getFirst返回一个exception。

    18.

    移除第一个结点并返回值

    类似于队列的pop,弹出第一个元素并且删除。

    相关文章

      网友评论

          本文标题:JDK源码阅读之旅(二)——LinkedList

          本文链接:https://www.haomeiwen.com/subject/vwmprxtx.html