web-dev-qa-db-ja.com

SetとListの違いは何ですか?

Set<E>List<E>インターフェースの基本的な違いは何ですか?

369
Johanna

Listは順序付けられた要素の並びですが、Setは順序付けされていない明確な要素のリストです(ありがとう、 Quinn Taylor )。

List<E>:

順序付きコレクション(シーケンスとも呼ばれる)。このインタフェースのユーザは、リストの各要素が挿入される場所を正確に制御できます。ユーザーは、整数のインデックス(リスト内の位置)で要素にアクセスしたり、リスト内の要素を検索したりできます。

Set<E>:

重複した要素を含まないコレクション。より正式には、集合はe1.equals(e2)のような要素e1とe2のペアを含まず、最大で1つのnull要素を含みます。その名前が示すように、このインタフェースは数学的な集合の抽象化をモデル化しています。

468
Andrew Hare
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
203
Sergii Shevchyk

要素の順序付きリスト(一意かどうかに関係なく)
Listという名前のJavaのインターフェースに準拠
インデックスでアクセス可能

を使って実装

  • LinkedList
  • 配列リスト

ユニークな要素のリスト:
Setという名前のJavaのインターフェースに準拠
インデックスからnotにアクセスできますか

を使って実装

  • ハッシュセット(順不同)
  • LinkedHashSet(順序付き)
  • TreeSet(自然順または提供されているコンパレータ順にソート)

SetListの両方のインターフェースは、Collectionという名前のJavaのインターフェースに準拠しています。

リストは重複する要素を含むことはできません。 List(Java)もまた順序を意味します。

26
Peter
  • リストは、アイテムを順番に並べたものです。
  • セットとは、アイテムの順序付けられていないグループ化で、重複は許可されません(通常)。

概念的には、重複をバッグとして許可し、重複を許可しない順序なしのグループ化をセットと呼びます。

16
Hardwareguy

リスト

  1. 要素の順序付けられたグループです。
  2. リストは重複した要素を集めるのに使われます。
  3. 新しいメソッドはListインタフェース内で定義されています。

設定

  1. 要素の順序付けられていないグループです。
  2. セットは重複なしで要素のコレクションに使用されます。
  3. Setインタフェース内に新しいメソッドは定義されていないため、CollectionサブクラスでのみCollectionインタフェースメソッドを使用する必要があります。
10

リスト:

Listsは通常、重複オブジェクトを許可します。 Listsは順序付けする必要があるため、インデックスでアクセスできます。

実装クラスには次が含まれます:ArrayListLinkedListVector

セット:

Sets do notオブジェクトの重複を許可します。ほとんどの実装は順序付けされていませんが、実装固有です。

実装クラスには、HashSet(順不同)、LinkedHashSet(順不同)、TreeSet(自然順または提供されたコンパレーター順)が含まれます。

9
csds

Javaインターフェースについて話しているので、Javadocを見ないでください。

  • Listは順序付きコレクション(シーケンス)です。通常、これは重複を許可します。
  • Setaは重複する要素を含まないコレクションです。繰り返しの順序は実装によって保証されるかもしれません

セットに関する順序の欠如についての言及はありません:それは実装に依存します。

7

セットとは、異なるオブジェクトの順序付けられていないグループです。重複するオブジェクトは許可されません。通常、挿入されているオブジェクトのハッシュコードを使用して実装されます。 (特定の実装は順序を追加するかもしれませんが、Setインタフェース自体はそうではありません。)

リストは、重複している可能性があるオブジェクトの順序付けられたグループです。それはArrayListLinkedListなどで実装することができます。

5
Quinn Taylor

これはあなたが探している答えではないかもしれませんが、コレクションクラスのJavaDocは実際にはかなり説明的です。コピー/貼り付け:

順序付きコレクション(シーケンスとも呼ばれる)。このインタフェースのユーザは、リストの各要素が挿入される場所を正確に制御できます。ユーザーは、整数のインデックス(リスト内の位置)で要素にアクセスしたり、リスト内の要素を検索したりできます。

セットとは異なり、リストは通常​​、重複要素を許可します。より正式には、リストは通常​​、e1.equals(e2)のように要素e1とe2のペアを許可し、それらがすべてnull要素を許可する場合は通常複数のnull要素を許可します。ユーザーが挿入しようとしたときにランタイム例外をスローして、重複を禁止するリストを実装したいという人がいることは考えられないことですが、この使用法はまれであると思われます。

5

1.Listは重複値を許可し、setは重複値を許可しません

2.Listは、リストに要素を挿入した順序を維持しますSetは順序を維持しません。 3.Listは要素の順序付けられたシーケンスであるのに対し、Setは順序付けられていない明確な要素のリストです。

3
Rakesh

リスト:
リストは重複する要素とnull値を許可します。対応する要素のインデックスを使用して検索するのは簡単で、要素を挿入順に表示します。例:(リンクリスト)

import Java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> il=l.iterator();

    System.out.println(l.get(0));

    while(il.hasNext()){
        System.out.println(il.next());
    }

    for(Integer str : l){
        System.out.println("Value:"+str);
    }
 }

}

出力:

1
1
555
333
888
555
ヌル
ヌル
値:1
値:555
値:333
値:888
値:555
値:null
値:null

設定:
setは重複する要素を許可せず、単一のnull値を許可します。要素を表示する順序は維持されません。TreeSetのみが昇順で表示されます。

例:(TreeSet)

import Java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<String>();
    try {
        set.add("hello");
        set.add("world");
        set.add("welcome");
        set.add("all");

        for (String num : set) {
            System.out.println( num);

        }
        set.add(null);
    } catch (NullPointerException e) {
        System.out.println(e);
        System.out.println("Set doesn't allow null value and duplicate value");
    }

 }

}

出力:

すべて
こんにちは
ようこそ
世界
Java.lang.NullPointerException
セットはnull値と重複値を許可しません

3
Indhu

すべてのListクラスは挿入の順序を維持します。それらはパフォーマンスや他の特性に基づいて異なる実装を使用します(例えば、特定のインデックスへのアクセスのスピードのためのArrayList、単に順序を維持するためのLinkedList)。キーがないので、重複は許可されています。

Setクラスは挿入順序を維持しません。それらはオプションで(SortedSetと同様に)特定の順序を課すことができますが、通常は(HashSetと同様に)何らかのハッシュ関数に基づく実装定義の順序を持​​ちます。 Setsはキーによってアクセスされるので、重複は許されません。

2
lavinio

リストVsセット

1)セットは重複を許可しません。リストは複製を許可します。 Setの実装に基づいて、挿入Orderも維持されます。

例:LinkedHashSet。挿入順を維持します。 ここをクリック を参照してください

2)methodを含みます。セットの性質上、アクセスのパフォーマンスが向上します。ベストケースは、そのo(1)。しかし、Listはcontainsを呼び出すためのパフォーマンス上の問題を抱えています。

2
Siva Kumar

順序付け...リストには順序がありますが、セットにはありません。

1
Ricardo Marimon

リスト:

  1. 許可された複製.
  2. 要素をグループ化して並べ替えます(つまり、順序が確定しています。昇順に並べ替える必要はありません)。

セット:

  1. 重複してはいけません。
  2. 要素をグループ化したときの順序なし(言い換えれば、明確な順序はありません。昇順になっている場合もない場合もあります)
1
vijaybhupathi

JavaのListとSetの間には、次のような違いがあります。

1) JavaのListとSetの基本的な違いは、重複した要素を許可することです。 Javaのリストは重複を許可しますが、Setは重複を許可しません。 Setに重複を挿入すると、古い値が置き換えられます。 JavaのSetの実装には、一意の要素しか含まれません。

2) JavaのListとSetのもう一つの大きな違いは順番です。 ListはOrdered Collection、SetはUnordered Collectionです。 Listは要素の挿入順序を維持します。つまり、前に挿入された要素は後に挿入された要素よりも低いインデックスに移動します。 Javaで設定しても順序は変わりません。 Setは、Setに格納されたオブジェクトのComparableおよびComparatorメソッドによって定義された特定のソート順でSet要素を格納できるSortedSetという別の代替手段を提供します。

3) JavaでのListインタフェースの一般的な実装には、ArrayList、Vector、およびLinkedListがあります。 Setインターフェースの一般的な実装にはHashSet、TreeSet、およびLinkedHashSetが含まれます。

挿入順序やオブジェクトを維持する必要があり、コレクションに重複が含まれる可能性がある場合は、Listよりも明らかにその方法が明確です。その一方で、あなたの要件がSetよりも重複することなくユニークなコレクションを維持することであるならば、Setは進むべき道です。

1

こんにちはそう多くの答えは既に与えられています。私はこれまでに言及されていないいくつかの点を指摘してみましょう:

  • ほとんどのList実装(ArrayList、Vector)implements RandomAccessインタフェースは、より高速なアクセスのためのマーカーインタフェースです。どのSet実装もそうしていません。
  • ListはListIterator双方向の反復をサポートと呼ばれる特別なイテレータを使います。 Setは一方向反復のみをサポートするIteratorを使用
  • HashSetは、同じ数の要素を格納するためにArrayListより5.5倍多くのメモリを使用します。
0
smruti ranjan

Set<E>List<E>はどちらもE型の要素を格納するために使用されます。違いは、Setは順不同で格納され、重複値を許可しないことです。 Listは要素を順番に格納するために使用され、重複した値を許可します。

Set要素はインデックス位置ではアクセスできず、List要素はインデックス位置でアクセスできます。

0
saibhushan