In deze tutorial leren we over de Java HashSet-klasse. We zullen met behulp van voorbeelden leren over verschillende hash-setmethoden en -bewerkingen.
De HashSet
klasse 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.HashSet
pakket 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 HashSet
klasse 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 setaddAll()
- 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.Iterator
pakket 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 setremoveAll()
- 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 HashSet
klasse 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 HashSet naar het opgegeven element en retourneert een booleaans resultaat |
isEmpty() | Controleert of het HashSet leeg 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 HashSet
wordt 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.
HashSet
mag 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.