LinkedList是由链表实现的(它同时继承了List和Deque双端队列接口)
链表是:一个整体中有三个部分,
1、第一个部分存放的是“前一个的地址”
2、第二个部分存放的是“自己的具体内容”
3、第三个部分存放的是“后一个的地址”
代码实现原理:
节点类(Node<E>):
E item; //代表第二部分,存放自己的内容
Node<E> next; //代表第一个部分,存放后一个的地址
Node<E> prev; //代表前一个部分,存放前一个的地址
链表集合(LinkedList<E>):
存在两个标识节点:
1、Node<E> first; //存储链表的第一个节点
2、Node<E> last; //存储链表的最后一个节点
注意:
1、(源码)追加值:
void linkLast(E e) {
final Node<E> l = last; //获取链表最后一个元素
final Node<E> newNode = new Node<>(l, e, null); //创建追加的元素节点
last = newNode; //因为是追加,所以链表最后位变成追加的节点
if (l == null) //如果链表最后一个元素为空,说明链表为空,则第一个元素也为当前追加的节点
first = newNode;
else //链表不为空,则原来最后一个节点存储当前追加节点的地址
l.next = newNode;
size++; //链表大小加一
modCount++;
}
2、(源码)插入首位:
private void linkFirst(E e) {
final Node<E> f = first; //获取链表第一个节点
final Node<E> newNode = new Node<>(null, e, f); //自己的新节点
first = newNode; //第一个节点变为自己
if (f == null) //原来链表为空,则最后一个节点也为自己
last = newNode;
else //不为空,原来第一个节点的prev存储我的地址
f.prev = newNode;
size++; //大小加一
modCount++;
}