Java Language
セット
サーチ…
値を持つHashSetを宣言する
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
- ランダムソート
Set<String> set = new HashSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");
// Set Elements: ["Strawberry", "Banana", "Apple"]
LinkedHashSet
- 挿入オーダー
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
Set<String> set = new TreeSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");
// Set Elements: ["Apple", "Banana", "Strawberry"]
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
は、 HashSet
、 TreeSet
、 LinkedHashSet
などのさまざまなクラスで実装されています。
例えば:
HashSet:
Set<T> set = new HashSet<T>();
ここで、 T
はString
、 Integer
または他のオブジェクトです。 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つの要素が等しくない重要な性質を持つ要素の集合を含むデータ構造である。
セットのタイプ:
- HashSet:ハッシュテーブル(実際にはHashMapインスタンス)を基にしたセットです。
- リンクされたHashSet:予測可能な反復順序で、ハッシュテーブルとリンクされたリストに裏打ちされたセット
- 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]