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

闭关修行中......

全員に返信(2)
小葫芦

リーリー リーリー

いいねを押す +0
大家讲道理

リンクが切れているのはなぜですか?
f は元の first を指し、新しい newNode を first に設定します。
このとき、元のリンクリストが空であれば最後も最初であると判断します。
それが空でない場合、f<original first node> の prev は first を指します。


リンクが壊れていると思う理由は、first の next が f を指しているのを見ていなかったからだと思います。えー、次は Node に渡されました
final Node<E> newNode = new Node<>(null, e, f);
private static class Node<E> リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート