In diesem Tutorial lernen wir die Java HashSet-Klasse kennen. Anhand von Beispielen lernen wir verschiedene Methoden und Operationen für Hash-Sets kennen.
Die HashSet
Klasse des Java Collections-Frameworks bietet die Funktionen der Hash-Tabellendatenstruktur.
Es implementiert die Set-Schnittstelle.
Erstellen eines HashSets
Um einen Hash-Satz zu erstellen, müssen wir java.util.HashSet
zuerst das Paket importieren .
Sobald wir das Paket importiert haben, können wir wie folgt Hash-Sets in Java erstellen.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Hier haben wir ein Hash-Set mit dem Namen erstellt numbers
.
Beachten Sie, dass der Teil neu ist HashSet(8, 0.75)
. Hier ist der erste Parameter die Kapazität und der zweite Parameter loadFactor .
- Kapazität - Die Kapazität dieses Hash-Sets beträgt 8. Das heißt, es können 8 Elemente gespeichert werden.
- loadFactor - Der Ladefaktor dieses Hash-Sets beträgt 0,6. Das heißt, wenn unser Hash-Set zu 60% gefüllt ist, werden die Elemente in eine neue Hash-Tabelle verschoben, die doppelt so groß ist wie die ursprüngliche Hash-Tabelle.
Standardkapazität und Lastfaktor
Es ist möglich, eine Hash-Tabelle zu erstellen, ohne deren Kapazität und Auslastungsfaktor zu definieren. Beispielsweise,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Standardmäßig,
- Die Kapazität des Hash-Sets beträgt 16
- Der Lastfaktor beträgt 0,75
Methoden von HashSet
Die HashSet
Klasse bietet verschiedene Methoden, mit denen wir verschiedene Operationen am Set ausführen können.
Elemente in HashSet einfügen
add()
- fügt das angegebene Element in die Menge einaddAll()
- fügt alle Elemente der angegebenen Sammlung in die Menge ein
Beispielsweise,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Ausgabe
HashSet: (2, 4, 6) Neues HashSet: (2, 4, 5, 6)
Greifen Sie auf HashSet-Elemente zu
Um auf die Elemente eines Hash-Sets zuzugreifen, können wir die iterator()
Methode verwenden. Um diese Methode verwenden zu können, müssen wir das java.util.Iterator
Paket importieren . Beispielsweise,
import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Ausgabe
HashSet: (2, 5, 6) HashSet mit Iterator: 2, 5, 6,
Elemente entfernen
remove()
- Entfernt das angegebene Element aus der MengeremoveAll()
- Entfernt alle Elemente aus dem Set
Beispielsweise,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) )
Ausgabe
HashSet: (2, 5, 6) Wird 5 entfernt? true Werden alle Elemente entfernt? wahr
Operationen einstellen
Die verschiedenen Methoden der HashSet
Klasse können auch verwendet werden, um verschiedene Mengenoperationen auszuführen.
Vereinigung von Mengen
Um die Vereinigung zwischen zwei Mengen durchzuführen, können wir die addAll()
Methode verwenden. Beispielsweise,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Ausgabe
HashSet1: (2, 4) HashSet2: (1, 3) Union ist: (1, 2, 3, 4)
Schnittmenge von Mengen
Um den Schnittpunkt zwischen zwei Mengen durchzuführen, können wir die retainAll()
Methode verwenden. Beispielsweise
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Ausgabe
HashSet1: (2, 3) HashSet2: (2, 4) Schnittpunkt ist: (2)
Unterschied der Sätze
Um die Differenz zwischen den beiden Mengen zu berechnen, können wir die removeAll()
Methode verwenden. Beispielsweise,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Ausgabe
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Unterschied: (2)
Teilmenge
Um zu überprüfen, ob eine Menge eine Teilmenge einer anderen Menge ist oder nicht, können wir die containsAll()
Methode verwenden. Beispielsweise,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Ausgabe
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Ist HashSet2 eine Teilmenge von HashSet1? wahr
Andere Methoden von HashSet
Methode | Beschreibung |
---|---|
clone() | Erstellt eine Kopie des HashSet |
contains() | Sucht das HashSet nach dem angegebenen Element und gibt ein boolesches Ergebnis zurück |
isEmpty() | Überprüft, ob das HashSet leer ist |
size() | Gibt die Größe des zurück HashSet |
clear() | Entfernt alle Elemente aus dem HashSet |
Weitere Informationen zu HashSet-Methoden finden Sie unter Java HashSet (offizielle Java-Dokumentation).
Warum HashSet?
In Java HashSet
wird häufig verwendet, wenn wir zufällig auf Elemente zugreifen müssen. Dies liegt daran, dass auf Elemente in einer Hash-Tabelle mithilfe von Hash-Codes zugegriffen wird.
Der Hashcode eines Elements ist eine eindeutige Identität, mit deren Hilfe das Element in einer Hash-Tabelle identifiziert werden kann.
HashSet
darf keine doppelten Elemente enthalten. Daher hat jedes Hash-Set-Element einen eindeutigen Hashcode.
Hinweis: HashSet ist nicht synchronisiert. Dies ist der Fall, wenn mehrere Threads gleichzeitig auf den Hash-Satz zugreifen und einer der Threads den Hash-Satz ändert. Dann muss es extern synchronisiert werden.