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