Java LinkedHashSet
Java LinkedHashSet
In deze zelfstudie leren we over de Java LinkedHashSet-klasse en zijn methoden met behulp van voorbeelden.
De LinkedHashSet
class van het Java collections framework biedt functionaliteiten van zowel de hashtabel als de gelinkte lijst datastructuur.
Het implementeert de Set-interface.
Elementen van LinkedHashSet
worden opgeslagen in hash-tabellen vergelijkbaar met HashSet.
Gekoppelde hash-sets houden echter intern een dubbel gekoppelde lijst bij voor al zijn elementen. De gekoppelde lijst definieert de volgorde waarin elementen in hashtabellen worden ingevoegd.
Maak een LinkedHashSet
Om een gekoppelde hash-set te maken, moeten we de java.util.LinkedHashSet
. importeren pakket eerst.
Zodra we het pakket hebben geïmporteerd, kunnen we als volgt gekoppelde hash-sets maken in Java.
// LinkedHashSet with 8 capacity and 0.75 load factor
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);
Hier hebben we een gekoppelde hash-set gemaakt met de naam nummers .
Let op, het onderdeel new LinkedHashSet<>(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 er 8 elementen in kunnen worden opgeslagen.
- loadFactor - De belastingsfactor van deze hashset is 0,6. Dit betekent dat wanneer onze hashtabel met 60% is gevuld, de elementen worden verplaatst naar een nieuwe hashtabel van het dubbele van de oorspronkelijke hashtabel.
Standaardcapaciteit en belastingsfactor
Het is mogelijk om een gekoppelde hashset te maken zonder de capaciteit en belastingsfactor te definiëren. Bijvoorbeeld,
// LinkedHashSet with default capacity and load factor
LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();
Standaard,
- de capaciteit van de gekoppelde hashset is 16
- de belastingsfactor zal 0,75 zijn
LinkedHashSet maken van andere verzamelingen
Hier is hoe we een gekoppelde hash-set kunnen maken die alle elementen van andere collecties bevat.
import java.util.LinkedHashSet;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
// Creating an arrayList of even numbers
ArrayList<Integer> evenNumbers = new ArrayList<>();
evenNumbers.add(2);
evenNumbers.add(4);
System.out.println("ArrayList: " + evenNumbers);
// Creating a LinkedHashSet from an ArrayList
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers);
System.out.println("LinkedHashSet: " + numbers);
}
}
Uitvoer
ArrayList: [2, 4] LinkedHashSet: [2, 4]
Methoden van LinkedHashSet
De LinkedHashSet
class biedt methoden waarmee we verschillende bewerkingen op de gekoppelde hash-set kunnen uitvoeren.
Elementen invoegen in LinkedHashSet
add()
- voegt het opgegeven element toe aan de gekoppelde hash-setaddAll()
- voegt alle elementen van de opgegeven verzameling toe aan de gekoppelde hash-set
Bijvoorbeeld,
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>();
// Using add() method
evenNumber.add(2);
evenNumber.add(4);
evenNumber.add(6);
System.out.println("LinkedHashSet: " + evenNumber);
LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
// Using addAll() method
numbers.addAll(evenNumber);
numbers.add(5);
System.out.println("New LinkedHashSet: " + numbers);
}
}
Uitvoer
LinkedHashSet: [2, 4, 6] New LinkedHashSet: [2, 4, 6, 5]
Toegang tot LinkedHashSet-elementen
Om toegang te krijgen tot de elementen van een gekoppelde hash-set, kunnen we de iterator()
. gebruiken methode. Om deze methode te gebruiken, moeten we de java.util.Iterator
. importeren pakket. 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);
// Calling the iterator() method
Iterator<Integer> iterate = numbers.iterator();
System.out.print("LinkedHashSet using Iterator: ");
// Accessing elements
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Uitvoer
LinkedHashSet: [2, 5, 6] LinkedHashSet using Iterator: 2, 5, 6,
Opmerking :
hasNext()
retourneerttrue
als er een volgend element in de gekoppelde hash-set isnext()
retourneert het volgende element in de gekoppelde hash-set
Elementen verwijderen uit HashSet
remove()
- verwijdert het opgegeven element uit de gekoppelde hash-setremoveAll()
- verwijdert alle elementen uit de gekoppelde 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);
// Using the 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
LinkedHashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true
Bewerkingen instellen
De verschillende methoden van de LinkedHashSet
class kan ook worden gebruikt om verschillende set-bewerkingen uit te voeren.
Union van Sets
Twee voeren de unie uit tussen twee sets, we kunnen de addAll()
. gebruiken methode. 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);
// Union of two set
numbers.addAll(evenNumbers);
System.out.println("Union is: " + numbers);
}
}
Uitvoer
LinkedHashSet1: [2, 4] LinkedHashSet2: [1, 3] Union is: [1, 3, 2, 4]
Kruispunt van verzamelingen
Om de kruising tussen twee sets uit te voeren, kunnen we de retainAll()
. gebruiken methode. 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);
// Intersection of two sets
evenNumbers.retainAll(primeNumbers);
System.out.println("Intersection is: " + evenNumbers);
}
}
Uitvoer
LinkedHashSet1: [2, 3] LinkedHashSet2: [2, 4] Intersection is: [2]
Verschil van sets
Om het verschil tussen de twee sets te berekenen, kunnen we de removeAll()
. gebruiken methode. 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);
// Difference between LinkedHashSet1 and LinkedHashSet2
primeNumbers.removeAll(oddNumbers);
System.out.println("Difference : " + primeNumbers);
}
}
Uitvoer
LinkedHashSet1: [2, 3, 5] LinkedHashSet2: [1, 3, 5] Difference: [2]
Subset
Om te controleren of een set een subset is van een andere set of niet, kunnen we de containsAll()
. gebruiken methode. 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);
// Check if primeNumbers is a subset of numbers
boolean result = numbers.containsAll(primeNumbers);
System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result);
}
}
Uitvoer
LinkedHashSet1: [1, 2, 3, 4] LinkedHashSet2: [2, 3] Is LinkedHashSet2 is a subset of LinkedHashSet1? true
Andere methoden van LinkedHashSet
Methode | Beschrijving |
---|---|
clone() | Maakt een kopie van de LinkedHashSet |
contains() | Zoekt de LinkedHashSet voor het opgegeven element en geeft een booleaans resultaat |
isEmpty() | Controleert of de LinkedHashSet is leeg |
size() | Retourneert de grootte van de LinkedHashSet |
clear() | Verwijdert alle elementen uit de LinkedHashSet |
Voor meer informatie over LinkedHashSet
methoden, bezoek Java LinkedHashSet (officiële Java-documentatie).
LinkedHashSet versus. HashSet
Beide LinkedHashSet
en HashSet
implementeert de Set
koppel. Er bestaan echter enkele verschillen tussen hen.
LinkedHashSet
houdt intern een gekoppelde lijst bij. Hierdoor behoudt het de invoegvolgorde van zijn elementen.- De
LinkedHashSet
klasse vereist meer opslagruimte danHashSet
. Dit komt omdatLinkedHashSet
onderhoudt intern gekoppelde lijsten. - De prestaties van
LinkedHashSet
is langzamer danHashSet
. Het is vanwege gekoppelde lijsten die aanwezig zijn inLinkedHashSet
.
LinkedHashSet vs. TreeSet
Dit zijn de belangrijkste verschillen tussen LinkedHashSet
en TreeSet
:
- De
TreeSet
class implementeert deSortedSet
koppel. Daarom worden elementen in een boomset gesorteerd. Echter, deLinkedHashSet
class handhaaft alleen de invoegvolgorde van zijn elementen. - Een
TreeSet
is meestal langzamer dan eenLinkedHashSet
. Het is omdat wanneer een element wordt toegevoegd aan eenTreeSet
, het moet de sorteerbewerking uitvoeren. LinkedHashSet
maakt het invoegen van null-waarden mogelijk. We kunnen echter geen null-waarde invoegen inTreeSet
.
Java