Java HashSet

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 HashSetKlasse 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.HashSetzuerst 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 HashSetKlasse 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 ein
  • addAll() - 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.IteratorPaket 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 Menge
  • removeAll() - 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 HashSetKlasse 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 HashSetnach dem angegebenen Element und gibt ein boolesches Ergebnis zurück
isEmpty() Überprüft, ob das HashSetleer 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 HashSetwird 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.

HashSetdarf 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.

Interessante Beiträge...