Javaのリストとセットの違い
コンテンツ
リストおよび設定インターフェイスは、コレクションを拡張します。両方とも、要素またはオブジェクトのコレクションを維持します。しかし、それらを互いに区別する主な違いは、リストは順序付けされた要素のコレクションであり、要素はインデックス変数を使用して追加または削除またはアクセスされることです。一方、Setはオブジェクトのコレクションであり、コレクションでは重複した要素を許可しません。以下に示す比較チャートを使用して、リストインターフェイスとセットインターフェイスの違いをさらに調べてみましょう。
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | リスト | セットする |
---|---|---|
ベーシック | リストは、リストに格納されている要素のシーケンスを維持します。 | Setは挿入順序を特に維持しませんが、Linked HashSetは挿入順序を維持します。 |
複製 | リストには要素が重複している場合があります。 | 重複する要素を挿入しようとすると、add()メソッドはfalseを返します。 |
方法 | Collectionで定義されたメソッドに加えて、Listは独自のメソッドのいくつかを定義します。 | Setは追加のメソッドを定義しません。 |
実装 | リストは、ArrayList、LinkedList、CopyOnWriteArrayList、Vector、Stackによって実装されます。 | セットは、HashSet、LinkedHashSet、EnumSet、TreeSet、CopyOnWriteArraySetによって実装されます。 |
リストの定義
リストインターフェイスは、コレクションインターフェイスを拡張します。リストは、要素またはオブジェクトの順序付けられたコレクションです。 Setとは異なり、Listには重複した要素が含まれる場合があります。コレクションリストで定義されているメソッドに加えて、インデックスベースのget()およびset()メソッドのような独自のメソッドをいくつか定義しています。メソッド引数で指定されたインデックスから指定された要素を追加または削除するコレクションから継承されたadd()およびremove()メソッド。リストは、リストに要素を追加するとサイズが大きくなる一種の配列です。
リストは、リスト内のインデックスの範囲を操作するメソッドを定義しません。指定された範囲の元のリストからサブリストを返すsublist()メソッドを定義します。サブリストに加えた変更は、元のリストにも表示されます。リストインターフェイスは、ArrayList、LinkedList、CopyOnWriteArrayList、Vector、Stackによって実装されます。
セットの定義
Setインターフェイスは、Collectionインターフェイスを拡張します。セットインターフェイスは、コレクションまたはオブジェクトのグループであり、その中に重複するオブジェクトはありません。つまり、2つの参照が1つのオブジェクトを参照できない、1つの参照が2つのオブジェクトを参照できない、または2つの参照がNullを参照できないということです。要素の順序または順序は重要なセットではありませんが、順序付きセットを禁止するわけではありません。
Setインターフェイスは、Collectionで定義されたメソッド以外のメソッドを定義しません。代わりに、コレクションのadd()メソッドとaddall()メソッドを制限して、コレクションに重複するオブジェクトを追加します。 Collectionのadd()メソッドを使用してコレクションに重複オブジェクトを追加しようとすると、falseが返されます。それ以外の場合は、trueを返します。 Setインターフェイスは、HashSet、LinkedHashSet、EnumSet、TreeSet、CopyOnWriteArraySetによって実装されます。
- コレクション内の要素/オブジェクトのシーケンスはリストで維持されますが、Setは要素の順序を維持しませんが、LinkedHashSetが挿入順序を維持する例外があります。
- リストは、インデックスで要素を識別するため、重複する要素を持つことができますが、コレクション内のオブジェクトを識別するインデックスの種類の要素がないため、Setは重複する要素を許可しません。
- リストは、コレクションで定義されたメソッドに加えて、独自のメソッドをいくつか定義します。一方、Setは独自のメソッドを定義しませんが、Collectionのメソッドを制限して重複する要素を追加します。
- リストは、ArrayList、LinkedList、CopyOnWriteArrayList、Vector、Stackインターフェイスによって実装されます。一方、SetはHashSet、LinkedHashSet、EnumSet、TreeSet、CopyOnWriteArraySetインターフェイスによって実装されます。
結論:
ListおよびSetインターフェイスの使用は、要件によって異なります。オブジェクト/要素の順序が重要な場合は、Listインターフェイスを使用する必要があります。コレクションに重複する要素が必要ない場合は、Setインターフェイスを使用する必要があります