5

Java のドキュメントを調べていたところ、ArrayLists の clear() メソッドに出会いました。

単純に新しい ArrayList オブジェクトを変数に再割り当てするのではなく、これをどのように使用しますか?

4

6 に答える 6

14

1 つのリストに複数の参照が存在する可能性があるため、すべての参照を再割り当てするよりも、リストをクリアする方が望ましいか、またはより実用的です。

配列を大量に (たとえば、大きなループ内で) 空にすると、多くの一時オブジェクトを作成しても意味がありません。確かにガベージコレクターは最終的にそれらをクリーンアップしますが、そうする必要がなければ、リソースを浪費しても意味がありません.

また、リストをクリアする方が、新しいリストを作成するよりも作業が少ないためです。

于 2009-05-05T22:45:15.413 に答える
3

あなたは最後のフィールド(クラス変数)を持っているかもしれませんList

private final List<Thing> things = ...

クラスのどこかで、すべてをクリア(すべて削除)したいとします。は最終版なのでthings、再割り当てすることはできません。さらに、完全に適切なリストがすでにインスタンス化されているため、新しいリストインスタンスを再割り当てしたくない場合があります。

于 2009-05-06T00:25:32.363 に答える
2

目的が本当に明確である場合、新しいオブジェクトを作成する場合よりも明確で支払う方が少なくなります。

参照を再割り当てしても、オブジェクトはクリアされません。他に参照がない場合は、比較的早くGCによって回収されると想定されています。そうでなければ、あなたは自分自身を混乱させました。

于 2009-05-06T00:31:31.070 に答える
2

上記の理由に加えて、リストをクリアする方が、新しいリストを作成するよりも意味的に正しいことがよくあります。リストをクリアすることが望ましい結果である場合、取るべき行動はリストをクリアすることであり、新しいリストを作成することではありません。

于 2009-05-06T02:00:48.143 に答える
2

java.util.ArrayListコード全体で同じものが複数参照されている状況を想像してください。リストの新しいインスタンスを作成してすべての変数に代入することは、ほとんど不可能または非常に困難です。しかしjava.util.ArrayList.clear()、トリックはありません!

于 2009-05-05T23:09:48.397 に答える
1

clear() は新しいオブジェクトを再割り当てしないため、パフォーマンスへの影響は少なくなります。

于 2009-05-05T22:48:36.497 に答える