リストがあります:
List<Integer> l1 = new ArrayList<Integer>();
そのリストにいくつかの整数変数を追加しました。何らかの操作を行った後、そのリストを再利用する必要があるため、 に設定しnull
ます。
null
に設定するのと使用するのとでは、どちらが優れてい.clear()
ますか? それとも別の方法がありますか?
リストがあります:
List<Integer> l1 = new ArrayList<Integer>();
そのリストにいくつかの整数変数を追加しました。何らかの操作を行った後、そのリストを再利用する必要があるため、 に設定しnull
ます。
null
に設定するのと使用するのとでは、どちらが優れてい.clear()
ますか? それとも別の方法がありますか?
l1 = null;
変数に null を代入しl1
ます。リストが以前に別のオブジェクトに格納されている場合、この別のオブジェクトはまだリストへの参照を持っているため、このリストに格納されているすべての要素に引き続きアクセスできます。以前に によって参照されていた List オブジェクト オブジェクトにl1
到達できなくなった場合、ガベージ コレクションが実行されます。その要素についても同じです。到達できなくなった場合は、ガベージ コレクションが行われます。
l1.clear();
リストからすべての要素を削除します。リストが以前に別のオブジェクトに保存されていた場合、この別のオブジェクトは、クリアしたばかりのリストへの参照を持っているため、リストに保存されていた要素にアクセスできなくなります (それらを削除したため)。以前にリストに格納された要素に到達できなくなった場合、それらはガベージ コレクションされます。リストへの参照を保持しているため、リストはそうではありません(l1
)。
そのため、変数l1 = null
を再利用したいが、Listオブジェクトをそのまま保持したい場合に使用する必要があります。リストからすべての要素を削除する場合に使用する必要があります。l1.clear()
l1 = null
リスト オブジェクトへの参照が破棄され、ガベージ コレクションが実行されます ( への参照が他にないと仮定しますList
)。
l1.clear()
リスト全体を反復し、そのすべての値をクリアします (つまり、各インデックスのオブジェクトを に設定しますnull
)。
最初の方法は、リスト全体を反復処理する必要がないため、通常は高速です。何らかの理由でList
オブジェクトを再利用する必要がある場合は、 を使用l1.clear()
してリストからオブジェクトを削除する必要があります。
に設定した場合はnull
、使用する前に再度初期化する必要があります。だから私はただやります:
l1 = new ArrayList<Integer>();
電話するよりも速いと思います.clear()
リストの内容をクリアしようとしていますか、それとも新しい次元、新しい配列で最初からやり直そうとしていますか? ガベージで配列を収集し、l1 = new Array(); を呼び出すだけです。リスト全体をクリアしようとする代わりに、null 値を持つ新しい配列を生成します。
を使用している場合、LinkedList
非常にclear()
高速で反復も行われます。ただし、単一のアクセスは遅くなります。あなたの選択はユースケースに依存します...