どのようにLinkedListのを使用して、舞台裏で(インデックス、要素)メソッドの作業を追加していますか?

アレックス:

用いた特定のインデックス位置に要素を追加する場合、追加(インデックス要素)内のメソッドのArrayListを他のすべての要素は、(それらがメモリに移動する)1で、そのインデックスを変更するが、それは、そのインデックス位置にある要素を配置します。その理由のArrayListのは、複雑性O(n)の特定の位置に要素を追加することがあります。

二重の場合はLinkedListは、私は、要素が前の要素にも次のいずれかのポインタを持っていることを知っています。

使用しているとき私の質問は、されたアドオン(インデックス、要素)に関連するメソッドLinkedListのを、何が実際に舞台裏で起こるのだろうか?私が使用していることを知っているのLinkedListに残りの要素がメモリに移動しないので、どのように彼らはまだメモリに移動することなく、特定のインデックスに配置することができます来ますか?

ティムBiegeleisen:

指定されたインデックスにリンクリストに新しい要素を追加すると、その後、(頭や尾のいずれかから)リストを歩いて必要とスプライシング新しい要素インチ ソースコードのためには、LinkedList#add(int index, E element)限り明らかに:

public void add(int index, E element) {
    checkPositionIndex(index);

    if (index == size)
        linkLast(element);
    else
        linkBefore(element, node(index));
}

インデックスがリスト内の最後の項目を指している必要があり、それは単に最後に新しいノードを追加します。そうでなければ、それが呼び出すlinkBefore()、スプライシング作業のビットを(私もそのソースコードを含めるように気にしないだろう)んています。

リンクリストに新しいノードを追加すると、必ずしも既存のリストには何も動いて関与していないことをここで注意してください。むしろ、それは主に、バックグラウンドでの参照を動き回る必要とします。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=334003&siteId=1
おすすめ