Java HashSet-klasse: Complete handleiding voor operaties, methoden en verzamelingstheorie
Java HashSet-klasse
Verken de Java HashSet-klasse – de aanmaak, kernmethoden en praktische set-operaties – door beknopte voorbeelden.
De HashSet-klasse, onderdeel van Java's Collections Framework, implementeert de Set-interface en biedt hash-tabel-gebaseerde opslag.
Een HashSet aanmaken
Eerst, importeer java.util.HashSet:
import java.util.HashSet;
Maak dan een HashSet aan met een specifieke capaciteit en load factor:
HashSet<Integer> numbers = new HashSet<>(8, 0.75); // capacity=8, loadFactor=0.75
Parameters:
- capaciteit – initiële bucket-aantal (8 in dit voorbeeld).
- loadFactor – drempel die resizing triggert (0.75 betekent resize wanneer 75% vol).
Standaardwaarden gebruiken is ook gebruikelijk:
HashSet<Integer> numbers1 = new HashSet<>(); // capacity=16, loadFactor=0.75
HashSet-methoden
Hieronder de meest frequente methoden:
add(T element)– voegt een enkel element toe.addAll(Collection<? extends T> c)– bulk invoeging.remove(Object o)– verwijdert een specifiek element.removeAll(Collection<? extends Object> c)– verwijdert meerdere elementen.contains(Object o)– controleert aanwezigheid.size()– aantal elementen.clear()– verwijdert alle entries.clone()– maakt een shallow copy.isEmpty()– test of leeg.containsAll(Collection<? extends Object> c)– subset-check.
Elementen invoegen
Voorbeeld met add en 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("Nieuwe HashSet: " + numbers); } }
Output
HashSet: [2, 4, 6] Nieuwe HashSet: [2, 4, 5, 6]
Elementen benaderen
Itereer met 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 met Iterator: "); while(iterate.hasNext()) { System.out.print(iterate.next() + ", "); } } }
Output
HashSet: [2, 5, 6] HashSet met Iterator: 2, 5, 6,
Elementen verwijderen
Enkele verwijdering en de set leegmaken:
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 verwijderd? " + removed); boolean cleared = numbers.removeAll(numbers); System.out.println("Zijn alle elementen verwijderd? " + cleared); } }
Output
HashSet: [2, 5, 6] Is 5 verwijderd? true Zijn alle elementen verwijderd? true
Set-operaties
HashSet's bulk-methoden ondersteunen klassieke verzamelingstheorie-operaties.
Unie
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("Unie is: " + numbers); } }
Output
Unie is: [1, 2, 3, 4]
Intersectie
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("Intersectie is: " + evenNumbers); } }
Output
Intersectie is: [2]
Verschil
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("Verschil: " + primeNumbers); } }
Output
Verschil: [2]
Subset-check
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 een subset van numbers? " + isSubset); } }
Output
Is primeNumbers een subset van numbers? true
Aanvullende methoden
| Methode | Beschrijving |
|---|---|
clone() | Maakt een shallow copy van de set. |
contains() | Controleert of een element bestaat. |
isEmpty() | Retourneert true als de set leeg is. |
size() | Aantal elementen in de set. |
clear() | Verwijdert alle elementen. |
Voor een volledige lijst, raadpleeg de officiële Java-documentatie.
Waarom HashSet gebruiken?
Wanneer willekeurige toegang vereist is, biedt HashSet O(1)-prestaties dankzij de hash-tabel-ondersteuning. Elke element's hashCode() garandeert uniekheid, wat duplicaten voorkomt. Echter, HashSet is niet thread-veilig; externe synchronisatie is nodig voor concurrente gebruik.
Let op: Omdat HashSet niet gesynchroniseerd is, kunnen meerdere threads die het gelijktijdig wijzigen, de datastructuur corrumperen.
Java
- Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
- Java instanceof operator: een uitgebreide gids
- Java-erfenis meesteren: concepten, typen en praktische voorbeelden
- Java geneste static classes begrijpen: gebruik, verschillen en voorbeelden
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken
- Java Reflectie meesteren: klassen, methoden en velden inspecteren tijdens runtime
- Java Collection-algoritmes: Sorteren, shuffelen en meer
- Java ObjectOutputStream: Serialisatie, methoden en praktische voorbeelden
- Java Generics: Herbruikbare, type-veilige code bouwen
- Java-bestandsbewerkingen onder de knie krijgen met java.io – Aanmaken, lezen, schrijven en verwijderen