1、LinkedList底层数据结构是一个双向链表,这里的size是元素个数,含有成员变量first和last,first和last都是LinkedList的内部类Node的实例对象,first主要用于判断是否第一次添加元素,last指向的是末尾元素。
transient int size;
transient LinkedList.Node<E> first;
transient LinkedList.Node<E> last;
public LinkedList() {
this.size = 0;
}
public boolean add(E var1) {
this.linkLast(var1);
return true;
}
2、首先 var2指向last,第一次添加时last为null,然后创建一个Node的实例对象var3(创建时第一个参数就是原先末尾元素的地址),然后把last指向这个新创建的元素(添加成功后就变为了末尾的元素),Node实例对象的构造方法,第一个参数存储的是上一级元素的地址,第二个为存储数据的地址,第三个为下一级元素的地址,如果没有下一级则为null.
判断var2是否为空(第一次才为空,var2指向的是last),为空则把var3的地址赋给first。如果不为空则把原先末尾对象var2(last)的next(下一级元素的地址)指向这个新创建的Node对象var3。
void linkLast(E var1) {
LinkedList.Node var2 = this.last;
LinkedList.Node var3 = new LinkedList.Node(var2, var1, (LinkedList.Node)null);
this.last = var3;
if (var2 == null) {
this.first = var3;
} else {
var2.next = var3;
}
++this.size;
++this.modCount;
}
private static class Node<E> {
E item;
LinkedList.Node<E> next;
LinkedList.Node<E> prev;
Node(LinkedList.Node<E> var1, E var2, LinkedList.Node<E> var3) {
this.item = var2;
this.next = var3;
this.prev = var1;
}
}
学艺不精,仅供参考,有错误请指出