サーチ…


値を持つHas​​hSetを宣言する

HashSetから継承する新しいクラスを作成することができます:

Set<String> h = new HashSet<String>() {{
    add("a");
    add("b");
}};

ワンラインソリューション:

Set<String> h = new HashSet<String>(Arrays.asList("a", "b"));

グアバを使用する:

Sets.newHashSet("a", "b", "c")

ストリームの使用:

Set<String> set3 = Stream.of("a", "b", "c").collect(toSet());

セットのタイプと使用法

一般的に、集合は一意の値を格納するコレクションの一種です。一意性は、 equals()およびhashCode()メソッドによって決定されます。

ソートはセットのタイプによって決まります。

HashSet - ランダムソート

Java SE 7
Set<String> set = new HashSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Strawberry", "Banana", "Apple"]

LinkedHashSet - 挿入オーダー

Java SE 7
Set<String> set = new LinkedHashSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Banana", "Apple", "Strawberry"]

TreeSet - compareTo()またはComparator

Java SE 7
Set<String> set = new TreeSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Apple", "Banana", "Strawberry"]
Java SE 7
Set<String> set = new TreeSet<> ((string1, string2) -> string2.compareTo(string1));
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Strawberry", "Banana", "Apple"]

初期化

Setは、重複する要素を含むことができないコレクションです。それは、数学的集合抽象をモデル化する。

Setは、 HashSetTreeSetLinkedHashSetなどのさまざまなクラスで実装されています。

例えば:

HashSet:

Set<T> set = new HashSet<T>();

ここで、 TStringIntegerまたは他のオブジェクトです。 HashSetはO(1)のクイックルックアップを可能にしますが、追加されたデータをソートせず、アイテムの挿入順序を失います。

TreeSet:

これは、O(lg(n))を取る基本的な操作の速度を犠牲にして、ソートされた方法でデータを格納します。アイテムの挿入順序は維持されません。

TreeSet<T> sortedSet = new TreeSet<T>();

LinkedHashSet:

これは、 HashSetリンクされたリストの実装です。追加された順序でアイテムを一度反復することができます。その内容はソートされていません。 O(1)の基本操作が提供されていますが、バッキングリンクリストの管理にはHashSetよりもコストがかかります。

LinkedHashSet<T> linkedhashset = new LinkedHashSet<T>();

セットの基礎

セットとは何ですか?

集合は、集合の2つの要素が等しくない重要な性質を持つ要素の集合を含むデータ構造である。

セットのタイプ:

  1. HashSet:ハッシュテーブル(実際にはHashMapインスタンス)を基にしたセットです。
  2. リンクされたHashSet:予測可能な反復順序で、ハッシュテーブルとリンクされたリストに裏打ちされたセット
  3. TreeSet: TreeMapに基づくNavigableSetの実装です。

セットの作成

Set<Integer> set = new HashSet<Integer>(); // Creates an empty Set of Integers

Set<Integer> linkedHashSet = new LinkedHashSet<Integer>(); //Creates a empty Set of Integers, with predictable iteration order

セットに要素を追加する

add()メソッドを使用して要素をセットに追加することができます

 set.add(12); //  - Adds element 12 to the set
 set.add(13); //  - Adds element 13 to the set

このメソッドを実行した後のセット:

set = [12,13]

セットのすべての要素を削除する

set.clear();  //Removes all objects from the collection.

このセットの後:

set = []

要素がセットの一部であるかどうかをチェックする

セット内の要素の存在は、 contains()メソッドを使ってチェックすることができます

set.contains(0);  //Returns true if a specified object is an element within the set.

出力: False

セットが空であるかどうかを確認する

isEmpty()メソッドを使用して、Setが空であるかどうかを確認できます。

set.isEmpty();  //Returns true if the set has no elements

出力: True

セットから要素を削除する

 set.remove(0); // Removes first occurrence of a specified object from the collection

セットのサイズを確認する

set.size(); //Returns the number of elements in the collection

出力: 0

既存のセットからリストを作成する

新しいリストの使用

List<String> list = new ArrayList<String>(listOfElements);

List.addAll()メソッドの使用

    Set<String> set = new HashSet<String>();
    set.add("foo");
    set.add("boo");
    
    List<String> list = new ArrayList<String>();
    list.addAll(set);

Java 8 Steam APIの使用

List<String> list = set.stream().collect(Collectors.toList());

Setを使用して重複を排除する

コレクションelementsがあり、同じ要素を含み、すべての重複が削除された別のコレクションを作成するとします。

Collection<Type> noDuplicates = new HashSet<Type>(elements);

List<String> names = new ArrayList<>(
        Arrays.asList("John", "Marco", "Jenny", "Emily", "Jenny", "Emily", "John"));
Set<String> noDuplicates = new HashSet<>(names);
System.out.println("noDuplicates = " + noDuplicates);

出力

noDuplicates = [Marco, Emily, John, Jenny]


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow