为什么 Java 的 LinkedList 的双链表实现不会链接后面元素
阿神
阿神 2017-04-18 10:48:47
0
2
937
  1. 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++;
    }
阿神
阿神

闭关修行中......

membalas semua(2)
小葫芦
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;
    }
}
final Node<E> newNode = new Node<>(null, e, f); // 构造函数的第3个参数不就是 next 元素了。
大家讲道理

Kenapa pautan terputus?
f menunjuk kepada yang asal dahulu dan menetapkan Nod baharu baharu kepada yang pertama.
Pada masa ini, adalah dinilai bahawa jika senarai pautan asal kosong, maka yang terakhir juga yang pertama.
Jika ia tidak kosong, maka sebelum f<nod pertama asal>


Saya rasa sebab anda fikir pautan itu rosak adalah kerana anda tidak melihat mata pertama seterusnya ke f. Er, seterusnya telah diluluskan dalam Node
final Node<E> newNode = new Node<>(null, e, f);
kelas statik peribadi 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;
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan