Java LinkedHashSet beheersen: Kenmerken, methoden en praktische voorbeelden
Java LinkedHashSet
In deze tutorial leren we over de Java LinkedHashSet-klasse en de methoden ervan met behulp van voorbeelden.
De LinkedHashSet-klasse van het Java collections framework biedt functionaliteiten van zowel de hashtabel als de linked list-datastructuur.
Het implementeert de Set-interface.

Elementen van LinkedHashSet worden opgeslagen in hash-tabellen vergelijkbaar met HashSet.
Echter, linked hash sets behouden intern een dubbel gelinkte lijst voor al zijn elementen. De linked list definieert de volgorde waarin elementen in de hash-tabellen worden ingevoegd.
Een LinkedHashSet aanmaken
Om een linked hash set aan te maken, moeten we eerst het java.util.LinkedHashSet-pakket importeren.
Zodra we het pakket geïmporteerd hebben, is dit hoe we linked hash sets in Java kunnen aanmaken.
// LinkedHashSet met 8 capaciteit en 0.75 load factor LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);
Hier hebben we een linked hash set genaamd numbers aangemaakt.
Let op, het deel new LinkedHashSet<>(8, 0.75). Hier is de eerste parameter capaciteit en de tweede parameter loadFactor.
- capaciteit - De capaciteit van deze hash set is 8. Dit betekent dat het 8 elementen kan opslaan.
- loadFactor - De load factor van deze hash set is 0.6. Dit betekent dat, wanneer onze hash-tabel voor 60% gevuld is, de elementen verplaatst worden naar een nieuwe hash-tabel van dubbele grootte van de oorspronkelijke hash-tabel.
Standaard capaciteit en load factor
Het is mogelijk om een linked hash set aan te maken zonder capaciteit en load factor te definiëren. Bijvoorbeeld,
// LinkedHashSet met standaard capaciteit en load factor LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();
Standaard:
- de capaciteit van de linked hash set zal 16 zijn
- de load factor zal 0.75 zijn
LinkedHashSet aanmaken vanuit andere collecties
Hier is hoe we een linked hash set kunnen aanmaken die alle elementen van andere collecties bevat.
import java.util.LinkedHashSet; import java.util.ArrayList; class Main { public static void main(String[] args) { // Een arrayList aanmaken van even getallen ArrayList<Integer> evenNumbers = new ArrayList<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Een LinkedHashSet aanmaken vanuit een ArrayList LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers); System.out.println("LinkedHashSet: " + numbers); } }
Output
ArrayList: [2, 4] LinkedHashSet: [2, 4]
Methoden van LinkedHashSet
De LinkedHashSet-klasse biedt methoden waarmee we diverse operaties op de linked hash set kunnen uitvoeren.
Elementen invoegen in LinkedHashSet
add()- voegt het gespecificeerde element toe aan de linked hash setaddAll()- voegt alle elementen van de gespecificeerde collectie toe aan de linked hash set
Bijvoorbeeld,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>(); // add() methode gebruiken evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); // addAll() methode gebruiken numbers.addAll(evenNumber); numbers.add(5); System.out.println("Nieuwe LinkedHashSet: " + numbers); } }
Output
LinkedHashSet: [2, 4, 6] Nieuwe LinkedHashSet: [2, 4, 6, 5]
LinkedHashSet-elementen benaderen
Om de elementen van een linked hash set te benaderen, kunnen we de iterator()-methode gebruiken. Om deze methode te gebruiken, moeten we het java.util.Iterator-pakket importeren. Bijvoorbeeld,
import java.util.LinkedHashSet; import java.util.Iterator; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // iterator() methode aanroepen Iterator<Integer> iterate = numbers.iterator(); System.out.print("LinkedHashSet met Iterator: "); // Elementen benaderen while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Output
LinkedHashSet: [2, 5, 6] LinkedHashSet met Iterator: 2, 5, 6,
Let op:
hasNext()retourneerttrueals er een volgend element in de linked hash set isnext()retourneert het volgende element in de linked hash set
Elementen verwijderen uit HashSet
remove()- verwijdert het gespecificeerde element uit de linked hash setremoveAll()- verwijdert alle elementen uit de linked hash set
Bijvoorbeeld,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // remove() methode gebruiken boolean value1 = numbers.remove(5); System.out.println("Is 5 verwijderd? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Zijn alle elementen verwijderd? " + value2); } }
Output
LinkedHashSet: [2, 5, 6] Is 5 verwijderd? true Zijn alle elementen verwijderd? true
Set-operaties
De diverse methoden van de LinkedHashSet-klasse kunnen ook gebruikt worden om diverse set-operaties uit te voeren.
Unie van Sets
Om de unie tussen twee sets uit te voeren, kunnen we de addAll()-methode gebruiken. Bijvoorbeeld,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(1); numbers.add(3); System.out.println("LinkedHashSet2: " + numbers); // Unie van twee sets numbers.addAll(evenNumbers); System.out.println("Unie is: " + numbers); } }
Output
LinkedHashSet1: [2, 4] LinkedHashSet2: [1, 3] Unie is: [1, 3, 2, 4]
Intersectie van Sets
Om de intersectie tussen twee sets uit te voeren, kunnen we de retainAll()-methode gebruiken. Bijvoorbeeld
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); // Intersectie van twee sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersectie is: " + evenNumbers); } }
Output
LinkedHashSet1: [2, 3] LinkedHashSet2: [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.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet<Integer> oddNumbers = new LinkedHashSet<>(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Verschil tussen LinkedHashSet1 en LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Verschil: " + primeNumbers); } }
Output
LinkedHashSet1: [2, 3, 5] LinkedHashSet2: [1, 3, 5] Verschil: [2]
Subset
Om te controleren of een set een subset is van een andere set, kunnen we de containsAll()-methode gebruiken. Bijvoorbeeld,
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Controleren of primeNumbers een subset is van numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 een subset van LinkedHashSet1? " + result); } }
Output
LinkedHashSet1: [1, 2, 3, 4] LinkedHashSet2: [2, 3] Is LinkedHashSet2 een subset van LinkedHashSet1? true
Overige methoden van LinkedHashSet
| Methode | Beschrijving |
|---|---|
clone() | Maakt een kopie van de LinkedHashSet |
contains() | Doorzoekt de LinkedHashSet naar het gespecificeerde element en retourneert een boolean-resultaat |
isEmpty() | Controleert of de LinkedHashSet leeg is |
size() | Retourneert de grootte van de LinkedHashSet |
clear() | Verwijdert alle elementen uit de LinkedHashSet |
Om meer te leren over LinkedHashSet-methoden, bezoek Java LinkedHashSet (officiële Java-documentatie).
LinkedHashSet vs. HashSet
Zowel LinkedHashSet als HashSet implementeren de Set-interface. Er bestaan echter enkele verschillen tussen hen.
LinkedHashSetbehoudt intern een linked list. Hierdoor behoudt het de invoegvolgorde van de elementen.- De
LinkedHashSet-klasse vereist meer opslag danHashSet. Dit is omdatLinkedHashSetintern linked lists behoudt. - De prestaties van
LinkedHashSetzijn langzamer danHashSet. Dit is door de linked lists inLinkedHashSet.
LinkedHashSet vs. TreeSet
Hier zijn de belangrijkste verschillen tussen LinkedHashSet en TreeSet:
- De
TreeSet-klasse implementeert deSortedSet-interface. Daarom zijn elementen in een tree set gesorteerd. Echter, deLinkedHashSet-klasse behoudt alleen de invoegvolgorde van de elementen. - Een
TreeSetis meestal langzamer dan eenLinkedHashSet. Dit is omdat telkens wanneer een element aan eenTreeSetwordt toegevoegd, de sorteeroperatie moet worden uitgevoerd. LinkedHashSetstaat de invoeging van null-waarden toe. Echter, we kunnen geen null-waarde invoegen inTreeSet.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java if…else beheersen: control flow uitgelegd
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
- Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList