これは実際には必要です。なぜアルゴリズムが必要なのかを示すために、アルゴリズムとコードを説明します。この質問には複雑なトピックが含まれているので、私の答えは初心者の方がより理解できるように少し書かれています。
まず、オブジェクトを使用するときにJVM内で実際に何が起こっているのかを理解することが重要です。 Javaでは、オブジェクト(プリミティブ型は含まれていないことに注意してください)は、実際には使用されません。代わりに、我々はの参照をオブジェクトに使用しています。オブジェクトは単にそのオブジェクトのポインタです。これを行うことで、メモリの割り当て/割り当て解除について心配することはありません。オブジェクトが不要になったときにオブジェクトが確実に削除されるようにするために、すべてのオブジェクトは、現在のプログラム状態で参照されている回数をカウントします。概して、あるオブジェクトを使用するスコープを入力するとき、そのオブジェクトの参照カウントはスコープを入力してインクリメントされ、スコープから離れるにつれてデクリメントされます。オブジェクトが0参照に達すると、現在、このオブジェクトを使用するプログラムの部分がないことを意味します。したがって、安全に削除できます。これは、ガベージコレクションの仕組みを簡単にまとめただけですが、最終的にはより複雑です。
この方法は、反復リストの各項目の上に起こっている、とがその現在のノードの各項目、Xを間接参照も参照を有します。これは、オブジェクトアイテム、前ことを言っていない、と次はXは、これらのオブジェクトに対して持つ唯一の参照、nullに設定する必要があります。これは、オブジェクトに0の参照がある場合、このオブジェクトを安全にガベージコレクトできます。我々はx.nextにそれを割り当てられた前
が for (Node<E> x = first; x != null;) {
x.item = null;
x.prev = null;
x = x.next;
}
次にノードXはまだ明らかにされx.next、への参照を保持:あなたは、このようなここのように、提案されたように、私たちは何をするならばxが削除された/削除されたとしても、そのオブジェクトがメモリ内で浮遊し続けるため、不要です。
どちらが早いかという質問に答えるには、意味がありません。はい、その範囲では、変数を作成するために数バイトを保存します。ですが、実際には新しいオブジェクトをインスタンス化しているわけではないため、参照を作成するだけですJVMで最適化されています)。この次のオブジェクトはスタック上に一時的に割り当てられます。そのスタックはループの次の繰り返しで上書きされるため、メモリ使用に関する懸念も生じません。
トラバーサルをクリアする前に 'x.next'を保存する必要があるためです。あなたが提案するものはうまくいかないでしょう。 – EJP
ところで、明示的にリストを明確にする理由を知りたい人は、http://stackoverflow.com/questions/575995/clear-impl-in-javas-linkedlistを参照してください。 – ykaganovich