HashSet

Die gebräuchlichste Umsetzung eines Set: HashSet.

java.util.Set

Eine Set verwendet man, um eine Menge von Elemente zu speichern. Dabei werden keine Duplikate gespeichert. Die java.util.HashSet ist die gebräuchlichste Implementierung eines Sets. Man könnte zum Beispiel in einem Set alle Wörter eines Texts speichern. Tritt ein Wort mehrmals auf, so wird dieses Wort nur bei ersten Male gespeichert. Im Set sind so alle auftretenden Wörter gespeichert und die size() Methode liefert die Anzahl unterschiedlicher Wörter zurück.

Dabei ist der Schlüssel immer eindeutig. Speichert man zwei Zuweisungen mit dem gleichen Schlüssel, so wird die erste Zuweisung überschrieben.

list1

Die Benennung eines Sets sollte der Inhalt beschreiben.
Zum Beispiel:

  • nameSet –> ein Set mit Namen
  • names –> mehrere Namen

Methodenübersicht

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Set<String> nameSet = new HashSet<>();
nameSet.add("Peter");
nameSet.add("Anna");
nameSet.add("Kurt");
nameSet.add("Anna");
nameSet.add("Petra");

System.out.println(nameSet.size()); // Output: 4
System.out.println(nameSet.contains("Peter")); // Output: true
System.out.println(nameSet.remove("Emil")); // Output: false
System.out.println(nameSet.remove("Anna")); // Output: true
System.out.println(nameSet.size()); // Output: 3
nameSet.clear();
System.out.println(nameSet.isEmpty()); // Output: true

Die Elemente eines Set kann man mit den Collection Methoden abrufen:

  • iterator(): Ein Iterator über die Elemente
  • stream(): Ein sequentieller Stream über die Elemente
  • forEach(): Führt eine bestimmte Aktion über alle Elemente aus

Die Reihenfolge der Elemente ist nicht garantiert. Es existieren Implementierung wie das SortedSet, welche eine bestimmte Reihenfolge sicherstellt.

Beispiel

Beispiel

Für die Beispiele verwenden wir die folgende initialisierte HashMap:

1
2
3
4
5
6
Set<String> nameSet = new HashSet<>();
nameSet.add("Peter");
nameSet.add("Anna");
nameSet.add("Kurt");
nameSet.add("Anna");
nameSet.add("Petra");

Beispiel 1 - Set erstellen

1
2
3
4
5
6
7
8
// mit Konstruktor
Set<String> nameSet = new HashSet<>();
nameSet.add("Peter");
nameSet.add("Emil");

// mit statischer of() Methode
Set<String> nameSet = Set.of("Peter", "Emil");
// of() liefert ein unmodifizierbares Set zurück. Kein HashSet!

Beispiel 2 - Auslesen der Elemente

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// Abfrage der Elemente mit einem Iterator:
Iterator<String> iterator = nameSet.iterator();
while(iterator.hasNext()) {
        System.out.println(iterator.next());
}

// Abfrage der Elemente mit einer for Schleife:
for (String name : nameSet){
        System.out.println(name);
}

// Abfrage der Elemente mit einem Stream:
nameSet.stream().forEach(name -> System.out.println(name));

// Abfrage der Elemente mit einem forEach:
nameSet.forEach(name -> System.out.println(name));
Aufgaben

Aufgaben

Aufgaben zu Modul #J6 - Java Collections - Set