Setは、順序を持たないコレクションで、Listとは異なり、重複する値が含まれないことが保証されています。
Setインターフェースのジェネリック型パラメーターは、Setに含まれる要素の型を表します。
Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");
なお、Set.of()メソッドは変更できないSetのインスタンスを作成することに注意してください。
このインスタンスに対してaddやremoveのようなメソッドを呼び出そうとすると、実行時に例外が発生します。
変更可能なSetを作成するには、Setインターフェースを実装するクラスをインスタンス化する必要があります。
このインターフェースを実装する最もよく使われる組み込みクラスは、HashSetクラスです。
Set<Integer> ints = new HashSet<>();
SetインターフェースはCollectionインターフェースとIterableインターフェースを拡張しているため、他の種類のコレクションと多くのメソッドを共有しています。
ただし、Collectionインターフェースとの大きな違いは、addやremoveのようなメソッドが(voidではなく)booleanを返し、そのメソッドを呼び出したときに要素がセットに含まれていたかどうかを示す点です:
Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1