JDK7中 LinkedList
private 方法 private void linkFirst(E e)
在新添加元素时链表不会断裂?
代码来源于 JDK7
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
f.prev = newNode;
// 此处没有执行 newNode.next = f; newNode.next 不会链接后面的元素
size++;
modCount++;
}
大家讲道理2017-04-18 10:50:47
為什麼會斷鍊呢?
f指向原來的first,將新的newNode設定為first。
這時候就判斷,如果原來的鍊錶就是空的,那麼last也就是first咯。
如果不為空,那麼就是將f<原來的首節點>的prev就指向first。
我猜你之所以覺得會斷鍊是因為,你沒看到first的next指向f。額next這個在Node已經傳進去了
final Node
private static class Node
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;
}
}