3

重複の可能性:
list.clear() vs list = new ArrayList<int>();

リストがあります:

List<Integer> l1  = new ArrayList<Integer>();

そのリストにいくつかの整数変数を追加しました。何らかの操作を行った後、そのリストを再利用する必要があるため、 に設定しnullます。

nullに設定するのと使用するのとでは、どちらが優れてい.clear()ますか? それとも別の方法がありますか?

4

5 に答える 5

2

l1 = null;変数に null を代入しl1ます。リストが以前に別のオブジェクトに格納されている場合、この別のオブジェクトはまだリストへの参照を持っているため、このリストに格納されているすべての要素に引き続きアクセスできます。以前に によって参照されていた List オブジェクト オブジェクトにl1到達できなくなった場合、ガベージ コレクションが実行されます。その要素についても同じです。到達できなくなった場合は、ガベージ コレクションが行われます。

l1.clear();リストからすべての要素を削除します。リストが以前に別のオブジェクトに保存されていた場合、この別のオブジェクトは、クリアしたばかりのリストへの参照を持っているため、リストに保存されていた要素にアクセスできなくなります (それらを削除したため)。以前にリストに格納された要素に到達できなくなった場合、それらはガベージ コレクションされます。リストへの参照を保持しているため、リストはそうではありません(l1)。

そのため、変数l1 = nullを再利用したいが、Listオブジェクトをそのまま保持したい場合に使用する必要があります。リストからすべての要素を削除する場合に使用する必要があります。l1.clear()

于 2012-07-02T15:00:14.090 に答える
2
  1. l1 = nullリスト オブジェクトへの参照が破棄され、ガベージ コレクションが実行されます ( への参照が他にないと仮定しますList)。

  2. l1.clear()リスト全体を反復し、そのすべての値をクリアします (つまり、各インデックスのオブジェクトを に設定しますnull)。

最初の方法は、リスト全体を反復処理する必要がないため、通常は高速です。何らかの理由でListオブジェクトを再利用する必要がある場合は、 を使用l1.clear()してリストからオブジェクトを削除する必要があります。

于 2012-07-02T14:58:20.240 に答える
0

に設定した場合はnull、使用する前に再度初期化する必要があります。だから私はただやります:

l1  = new ArrayList<Integer>();

電話するよりも速いと思います.clear()

于 2012-07-02T14:59:56.613 に答える
0

リストの内容をクリアしようとしていますか、それとも新しい次元、新しい配列で最初からやり直そうとしていますか? ガベージで配列を収集し、l1 = new Array(); を呼び出すだけです。リスト全体をクリアしようとする代わりに、null 値を持つ新しい配列を生成します。

于 2012-07-02T14:56:03.503 に答える
0

を使用している場合、LinkedList非常にclear()高速で反復も行われます。ただし、単一のアクセスは遅くなります。あなたの選択はユースケースに依存します...

于 2012-07-02T14:57:05.670 に答える