選択は、それで何をしたいかによって大きく異なります。
それがあなたの質問に記載されている場合:
一意であることが保証されているオブジェクトのコレクションがあります (特に、一意の整数 ID によってインデックスが付けられています)。また、それらの数が正確にわかっています。
これが必要な場合は、どちらも必要ありません。Collectionには size() メソッドがあり、そのサイズを取得できます。これは、コレクション内にいくつあるかを意味します。
「オブジェクトのコレクション」の意味が実際にはコレクションではなく、さらに処理するためにオブジェクトを格納するコレクションのタイプを選択する必要がある場合は、さまざまな種類のコレクションについて、さまざまな機能と機能があることを知っておく必要があります。特性。
まず、公平な比較ができると思います。再割り当てを処理する必要がない Array の代わりに ArrayList を使用することを検討する必要があります。
次に、ArrayList と HashSet の選択になります。これは非常に簡単です。
リストまたはセットが必要ですか? これらは目的が異なります。リストはインデックス付きアクセスを提供し、反復はインデックス順に行われます。セットは主にデータの個別のセットを保持するためのものであり、その性質を考えると、インデックス付きアクセスはありません。
使用するリストまたはセットを決定したら、リスト/セットの実装を選択します。通常、リストの場合は ArrayList と LinkedList から選択しますが、セットの場合は HashSet と TreeSet のいずれかを選択します。
すべての選択は、そのデータのコレクションで何をしたいかによって異なります。それらは、異なるアクションで異なるパフォーマンスを発揮します。
たとえば、ArrayList のインデックス付きアクセスは O(1)、HashSet では (意味はありませんが) O(n)、(参考までに、LinkedList では O(n)、TreeSet では O(nlogn) です)。
新しい要素を追加するには、ArrayList と HashSet の両方が O(1) 操作です。中間に挿入すると、ArrayList では O(n) になりますが、HashSet では意味がありません。どちらも再割り当ての影響を受け、再割り当てには両方とも O(n) が必要です (HashSet は通常、再割り当てが遅くなります。これは、各要素のハッシュの計算が再び必要になるためです)。
コレクションに特定の要素が存在するかどうかを調べるには、ArrayList は O(n)、HashSet は O(1) です。
まだまだやれることはたくさんあるので、何がしたいのかわからないまま性能を議論しても意味がありません。