Ein Set ist eine ungeordnete Sammlung, die (anders als List) garantiert keine doppelten Werte enthält.
Der generische Typparameter des Set-Interfaces gibt den Typ der Elemente an, die im Set enthalten sind:
Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");
Beachte, dass die Methode Set.of() eine unveränderbare Set-Instanz erzeugt.
Wenn du auf dieser Instanz Methoden wie add und remove aufrufst, führt das zur Laufzeit zu einer Ausnahme.
Um ein veränderbares Set zu erzeugen, musst du eine Klasse instanziieren, die das Set-Interface implementiert.
Die am häufigsten verwendete eingebaute Klasse, die dieses Interface implementiert, ist die Klasse HashSet.
Set<Integer> ints = new HashSet<>();
Das Set-Interface erbt von den Interfaces Collection und Iterable und teilt deshalb viele Methoden mit anderen Arten von Sammlungen.
Ein bemerkenswerter Unterschied zum Collection-Interface ist jedoch, dass Methoden wie add und remove einen boolean zurückgeben (statt void), der angibt, ob das Element im Set enthalten war, als die Methode aufgerufen wurde:
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