transient int size = 0;Pointer to first node. Invariant: (first == null && last == null) || (first. prev == null && first. item != null)
transient Node<E> first;Pointer to last node. Invariant: (first == null && last == null) || (last. next == null && last. item != null)
transient Node<E> last;Constructs an empty list.
public LinkedList() { }内有一个内部类 node
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}my understanding
当创建一个 LinkedList 对象
LinkedList linkedList = new LinkedList();走默认构造器, size 为 1
执行添加操作
linkedList.add(1);进入
void linkLast(E e) {
final Node<E> l = last; // last is null, so is l.
final Node<E> newNode = new Node<>(l, e, null); // 构建一个节点,pre is null, element is 1, next is null.
last = newNode; // 让 last 指向 null
if (l == null) // l 为空,进入判断
first = newNode; // 让 first 也指向新构建的节点
else
l.next = newNode;
size++;
modCount++;
}再执行添加操作
linkedList.add(2);进入
void linkLast(E e) {
final Node<E> l = last; // 让 l 指向 last, last 指向刚创建的节点 LinkedList$Node0517
// 构建一个新节点,pre 指向 LinkedList$Node0517, element is 2, next is null.
final Node<E> newNode = new Node<>(l, e, null);
last = newNode; // 让 last 指向 新创建的 node:LinkedList$Node0525
if (l == null)
first = newNode;
else // l 不为 null
l.next = newNode; // 让LinkedList$Node0517的next指向LinkedList$Node0525(新创建的)
size++;
modCount++;
}