Java HashSet

In deze tutorial leren we over de Java HashSet-klasse. We zullen met behulp van voorbeelden leren over verschillende hash-setmethoden en -bewerkingen.

De HashSetklasse van het Java Collections-framework biedt de functionaliteiten van de datastructuur van de hashtabel.

Het implementeert de Set-interface.

Een HashSet maken

Om een ​​hash-set te maken, moeten we het java.util.HashSetpakket eerst importeren .

Zodra we het pakket hebben geïmporteerd, kunnen we als volgt hash-sets in Java maken.

 // HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75); 

Hier hebben we een hash-set gemaakt met de naam numbers.

Merk op, het nieuwe deel HashSet(8, 0.75). Hier is de eerste parameter capaciteit en de tweede parameter is loadFactor .

  • capaciteit - De capaciteit van deze hash-set is 8. Dit betekent dat hij 8 elementen kan opslaan.
  • loadFactor - De belastingsfactor van deze hash-set is 0,6. Dit betekent dat wanneer onze hash-set voor 60% is gevuld, de elementen worden verplaatst naar een nieuwe hashtabel die dubbel zo groot is als de originele hashtabel.

Standaard capaciteit en belastingsfactor

Het is mogelijk om een ​​hashtabel te maken zonder de capaciteit en beladingsgraad te definiëren. Bijvoorbeeld,

 // HashSet with default capacity and load factor HashSet numbers1 = new HashSet(); 

Standaard,

  • de capaciteit van de hash-set is 16
  • de belastingsfactor zal 0,75 zijn

Methoden van HashSet

De HashSetklasse biedt verschillende methoden waarmee we verschillende bewerkingen op de set kunnen uitvoeren.

Voeg elementen toe aan HashSet

  • add() - voegt het opgegeven element toe aan de set
  • addAll() - voegt alle elementen van de opgegeven collectie toe aan de set

Bijvoorbeeld,

 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); ) ) 

Uitvoer

 HashSet: (2, 4, 6) Nieuwe HashSet: (2, 4, 5, 6) 

Toegang tot HashSet-elementen

Om toegang te krijgen tot de elementen van een hash-set, kunnen we de iterator()methode gebruiken. Om deze methode te gebruiken, moeten we het java.util.Iteratorpakket importeren . Bijvoorbeeld,

 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(", "); ) ) ) 

Uitvoer

 HashSet: (2, 5, 6) HashSet met Iterator: 2, 5, 6, 

Elementen verwijderen

  • remove() - verwijdert het opgegeven element uit de set
  • removeAll() - verwijdert alle elementen uit de set

Bijvoorbeeld,

 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); ) ) 

Uitvoer

HashSet: (2, 5, 6) Is 5 verwijderd? true Zijn alle elementen verwijderd? waar

Stel bewerkingen in

De verschillende methoden van de HashSetklasse kunnen ook worden gebruikt om verschillende setbewerkingen uit te voeren.

Unie van sets

Om de vereniging tussen twee sets uit te voeren, kunnen we de addAll()methode gebruiken. Bijvoorbeeld,

 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); ) ) 

Uitvoer

 HashSet1: (2, 4) HashSet2: (1, 3) Union is: (1, 2, 3, 4) 

Snijpunt van sets

Om de kruising tussen twee sets uit te voeren, kunnen we de retainAll()methode gebruiken. Bijvoorbeeld

 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); ) ) 

Uitvoer

 HashSet1: (2, 3) HashSet2: (2, 4) Intersectie is: (2) 

Verschil van sets

Om het verschil tussen de twee sets te berekenen, kunnen we de removeAll()methode gebruiken. Bijvoorbeeld,

 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); ) ) 

Uitvoer

 HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Verschil: (2) 

Subgroep

Om te controleren of een set een subset is van een andere set of niet, kunnen we de containsAll()methode gebruiken. Bijvoorbeeld,

 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); ) ) 

Uitvoer

HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Is HashSet2 een subset van HashSet1? waar

Andere methoden van HashSet

Methode Omschrijving
clone() Maakt een kopie van het HashSet
contains() Zoekt HashSetnaar het opgegeven element en retourneert een booleaans resultaat
isEmpty() Controleert of het HashSetleeg is
size() Retourneert de grootte van de HashSet
clear() Verwijdert alle elementen uit het HashSet

Ga naar Java HashSet (officiële Java-documentatie) voor meer informatie over HashSet-methoden.

Waarom HashSet?

In Java HashSetwordt het vaak gebruikt als we willekeurig toegang moeten hebben tot elementen. Het is omdat elementen in een hashtabel worden benaderd met behulp van hashcodes.

De hashcode van een element is een unieke identiteit die helpt om het element in een hashtabel te identificeren.

HashSetmag geen dubbele elementen bevatten. Daarom heeft elk hash-set-element een unieke hashcode.

Opmerking: HashSet is niet gesynchroniseerd. Dat wil zeggen als meerdere threads tegelijkertijd toegang hebben tot de hash-set en een van de threads de hash-set wijzigt. Dan moet het extern worden gesynchroniseerd.

Interessante artikelen...