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,弹出第一个元素并且删除。