Java のドキュメントを調べていたところ、ArrayLists の clear() メソッドに出会いました。
単純に新しい ArrayList オブジェクトを変数に再割り当てするのではなく、これをどのように使用しますか?
Java のドキュメントを調べていたところ、ArrayLists の clear() メソッドに出会いました。
単純に新しい ArrayList オブジェクトを変数に再割り当てするのではなく、これをどのように使用しますか?
1 つのリストに複数の参照が存在する可能性があるため、すべての参照を再割り当てするよりも、リストをクリアする方が望ましいか、またはより実用的です。
配列を大量に (たとえば、大きなループ内で) 空にすると、多くの一時オブジェクトを作成しても意味がありません。確かにガベージコレクターは最終的にそれらをクリーンアップしますが、そうする必要がなければ、リソースを浪費しても意味がありません.
また、リストをクリアする方が、新しいリストを作成するよりも作業が少ないためです。
あなたは最後のフィールド(クラス変数)を持っているかもしれませんList
:
private final List<Thing> things = ...
クラスのどこかで、すべてをクリア(すべて削除)したいとします。は最終版なのでthings
、再割り当てすることはできません。さらに、完全に適切なリストがすでにインスタンス化されているため、新しいリストインスタンスを再割り当てしたくない場合があります。
目的が本当に明確である場合、新しいオブジェクトを作成する場合よりも明確で支払う方が少なくなります。
参照を再割り当てしても、オブジェクトはクリアされません。他に参照がない場合は、比較的早くGCによって回収されると想定されています。そうでなければ、あなたは自分自身を混乱させました。
上記の理由に加えて、リストをクリアする方が、新しいリストを作成するよりも意味的に正しいことがよくあります。リストをクリアすることが望ましい結果である場合、取るべき行動はリストをクリアすることであり、新しいリストを作成することではありません。
java.util.ArrayList
コード全体で同じものが複数参照されている状況を想像してください。リストの新しいインスタンスを作成してすべての変数に代入することは、ほとんど不可能または非常に困難です。しかしjava.util.ArrayList.clear()
、トリックはありません!
clear() は新しいオブジェクトを再割り当てしないため、パフォーマンスへの影響は少なくなります。