美文网首页
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