LinkedList也是实现List接口的一个类,我用的比较少,现在要来好好学习下。
先来看他的成员变量。
再看看构造方法
在看成员方法之前时首先看一下一个十分重要的内部类。
定义了一个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.
16.
和ArrayList相同,删除的也是第一个出现的元素。通过链表的循环进行搜索。
17.
和getFirst不同的是,peek碰到空结点会返回null,而getFirst返回一个exception。
18.
类似于队列的pop,弹出第一个元素并且删除。