JavaのCollection
とList
の違いは何ですか?いつどれを使うべきですか?
まず: List
は Collection
です。ただし、特殊なCollection
です。
Collection
は、アイテムのコレクションです。ものを追加したり、ものを削除したり、ものを反復したり、そこにどれだけのものがあるかを照会したりできます。
List
は、定義されたもののシーケンスに関する情報をそれに追加します:位置nで要素を取得でき、位置n、位置nの要素を削除できます。
Collection
では、それを行うことはできません。「このコレクションの5番目の要素」は、定義された順序がないため、定義されていません。
Set
など、他の特殊なコレクションもあります。これは、同じ要素が2回含まれないという機能を追加します。
Collection
は、Java Collections階層へのルートインターフェイスです。 List
は、順序付けられたコレクションを定義する1つのサブインターフェースであり、他のサブインターフェースは Queue
通常、処理可能な要素を保存します(例( stack ))。
次の図は、さまざまなJavaコレクションタイプ間の関係を示しています。
Java APIはこれに答えるのに最適です
コレクション
コレクション階層のルートインターフェイス。コレクションは、その要素として知られるオブジェクトのグループを表します。一部のコレクションでは要素の重複が許可され、他のコレクションでは許可されません。順序付けされているものと順序付けられていないものがあります。 JDKはこのインターフェイスの直接の実装を提供しません。SetやListなどのより具体的なサブインターフェイスの実装を提供します。このインターフェイスは通常、コレクションを渡したり、最大限の汎用性が必要な場合にコレクションを操作したりするために使用されます。
リスト(コレクションを拡張)
順序付けられたコレクション(シーケンスとも呼ばれます)。このインターフェイスのユーザーは、リストの各要素を挿入する場所を正確に制御できます。ユーザーは、整数インデックス(リスト内の位置)で要素にアクセスし、リスト内の要素を検索できます。
セットとは異なり、リストは通常、要素の重複を許可します。より正式には、リストは通常、e1.equals(e2)のような要素e1とe2のペアを許可し、ヌル要素を許可する場合は複数のヌル要素を許可します。ユーザーが重複を挿入しようとしたときにランタイム例外をスローすることで、重複を禁止するリストを実装することを誰かが望んでいることは考えられませんが、この使用はまれであると予想されます。
リストとセットは、コレクションの2つのサブクラスです。
リストでは、データは特定の順序です。
セットでは、同じデータを2回含めることはできません。
コレクションでは、特定の順序なしでデータを保存するだけで、重複データを含めることができます。
Collectionは、他のオブジェクトのコレクションを含むことができるJavaオブジェクトを記述する高レベルのインターフェースです。それらがどのようにアクセスされるか、同じオブジェクトの複数のコピーが同じコレクション内に存在できるかどうか、または順序が重要であるかどうかについてはあまり明確ではありません。 リストは、具体的には順序付けられたオブジェクトのコレクションです。オブジェクトを特定の順序でリストに入れると、オブジェクトはその順序のままになります。
そして、これら2つのインターフェースをどこで使用するかを決定することは、使用する具体的な実装が何であるかを決定するよりもはるかに重要ではありません。これは、プログラムの時間とスペースのパフォーマンスに影響します。たとえば、リストが必要な場合は、ArrayListまたはLinkedListを使用できます。これらはそれぞれアプリケーションに影響を与えます。他のコレクションタイプ(セットなど)についても、同様の考慮事項が適用されます。
Collection はListのスーパーインターフェースなので、すべてのJavaリストはコレクションのインスタンスでもあります。リストは、get(int index)
メソッドを介して特定の位置にある要素へのアクセスを許可しますが、コレクションは連続して(特定の順序で)反復できません。
コレクションはJavaコレクション階層のメインインターフェイスであり、List(Sequence)は順序付けられたコレクションを定義するサブインターフェイスの1つです。