Java HashSet-Klasse: Vollständiger Leitfaden zu Operationen, Methoden und Mengenlehre
Java HashSet-Klasse
Erkunden Sie die Java HashSet-Klasse – ihre Erstellung, Kernmethoden und praktische Mengenoperationen – durch prägnante Beispiele.
Die HashSet-Klasse, Teil von Javas Collections Framework, implementiert das Set-Interface und bietet Hashtable-basierten Speicher.
HashSet erstellen
Zuerst java.util.HashSet importieren:
import java.util.HashSet;
Dann HashSet mit spezifischer Kapazität und Load Factor erstellen:
HashSet<Integer> numbers = new HashSet<>(8, 0.75); // capacity=8, loadFactor=0.75
Parameter:
- capacity – initiale Bucket-Anzahl (8 in diesem Beispiel).
- loadFactor – Schwellenwert für Resizing (0.75 bedeutet Resize bei 75% Füllung).
Defaults sind auch üblich:
HashSet<Integer> numbers1 = new HashSet<>(); // capacity=16, loadFactor=0.75
HashSet-Methoden
Unten die häufigsten Methoden:
add(T element)– fügt einzelnes Element ein.addAll(Collection<? extends T> c)– Bulk-Einfügung.remove(Object o)– löscht spezifisches Element.removeAll(Collection<? extends Object> c)– entfernt mehrere Elemente.contains(Object o)– prüft Anwesenheit.size()– Anzahl Elemente.clear()– entfernt alle Einträge.clone()– erstellt flache Kopie.isEmpty()– testet ob leer.containsAll(Collection<? extends Object> c)– Teilmengenprüfung.
Elemente einfügen
Beispiel mit add und addAll:
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumber = new HashSet<>(); evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet<Integer> numbers = new HashSet<>(); numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); } }
Ausgabe
HashSet: [2, 4, 6] New HashSet: [2, 4, 5, 6]
Auf Elemente zugreifen
Iterieren mit Iterator:
import java.util.HashSet; import java.util.Iterator; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); Iterator<Integer> iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); while(iterate.hasNext()) { System.out.print(iterate.next() + ", "); } } }
Ausgabe
HashSet: [2, 5, 6] HashSet using Iterator: 2, 5, 6,
Elemente entfernen
Einzelnes Entfernen und Set leeren:
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); boolean removed = numbers.remove(5); System.out.println("Is 5 removed? " + removed); boolean cleared = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + cleared); } }
Ausgabe
HashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true
Mengenoperationen
HashSets Bulk-Methoden unterstützen klassische Mengenlehre-Operationen.
Vereinigung
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); HashSet<Integer> numbers = new HashSet<>(); numbers.add(1); numbers.add(3); numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); } }
Ausgabe
Union is: [1, 2, 3, 4]
Schnittmenge
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); } }
Ausgabe
Intersection is: [2]
Differenz
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); HashSet<Integer> oddNumbers = new HashSet<>(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); primeNumbers.removeAll(oddNumbers); System.out.println("Difference: " + primeNumbers); } }
Ausgabe
Difference: [2]
Teilmengenprüfung
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); boolean isSubset = numbers.containsAll(primeNumbers); System.out.println("Is primeNumbers a subset of numbers? " + isSubset); } }
Ausgabe
Is primeNumbers a subset of numbers? true
Zusätzliche Methoden
| Methode | Beschreibung |
|---|---|
clone() | Erstellt flache Kopie des Sets. |
contains() | Prüft ob Element existiert. |
isEmpty() | Gibt true falls Set leer. |
size() | Anzahl Elemente im Set. |
clear() | Entfernt alle Elemente. |
Für vollständige Liste siehe offizielle Java Dokumentation.
Warum HashSet verwenden?
Wenn zufälliger Zugriff erforderlich ist, bietet HashSet O(1)-Performance dank Hashtable-Backing. Jedes Elements hashCode() garantiert Einzigartigkeit und verhindert Duplikate. Allerdings ist HashSet nicht thread-sicher; externe Synchronisation nötig für konkurrierende Nutzung.
Hinweis: Da HashSet unsynchronisiert ist, können mehrere Threads, die es concurrent modifizieren, die Datenstruktur korrumpieren.
Java
- Javas final-Schlüsselwort verstehen: Variablen, Methoden und Klassen
- Java instanceof-Operator: Ein umfassender Leitfaden
- Java statische verschachtelte Klassen verstehen: Nutzung, Unterschiede und Beispiele
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Singleton-Pattern erklärt: Sichere Implementierung und Verwendung
- Java Reflection meistern: Klassen, Methoden und Felder zur Laufzeit inspizieren
- Java Collections Algorithmen meistern: Sortieren, Mischen und mehr
- Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
- Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen
- Java-Dateioperationen mit java.io meistern – Erstellen, Lesen, Schreiben & Löschen