LinkedList的add源码
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
}
点击查看add方法
public boolean add(E e) {
linkLast(e);
return true;
}
再查看linkLast方法
/**
* Links e as last element.
*/
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++;
}
因为我们添加没有指定下标,所以就是添加在最后。
/**
* Pointer to last node.
* Invariant: (first == null && last == null) ||
* (last.next == null && last.item != null)
*/
transient Node<E> last;
代码中的last
我们可以通过注释得知这是指向最后一个节点的。
那我们可以轻易知道这段代码的思路了,先创建一个常量l指向尾节点,然后新建newNode节点,newNode的值是添加的元素,newNode.prev是l指向的节点,此时newNode已经指向了上一个节点l,但是l还没有指向newNode,所以l在非空的情况下就指向了newNode节点,同时last指向了newNode,此时newNode节点就是当前链表的最后一个节点了。