In deze zelfstudie leren we met behulp van voorbeelden over de Java LinkedHashSet-klasse en zijn methoden.
De LinkedHashSet
klasse van het Java-verzamelingsraamwerk biedt functionaliteiten van zowel de hashtabel als de gekoppelde lijstgegevensstructuur.
Het implementeert de Set-interface.
Elementen van LinkedHashSet
worden opgeslagen in hashtabellen vergelijkbaar met HashSet.
Gelinkte hash-sets houden echter intern een dubbelgekoppelde lijst bij voor al zijn elementen. De gekoppelde lijst bepaalt de volgorde waarin elementen in hashtabellen worden ingevoegd.
Maak een LinkedHashSet
Om een gekoppelde hash-set te maken, moeten we het java.util.LinkedHashSet
pakket eerst importeren .
Nadat we het pakket hebben geïmporteerd, kunnen we als volgt gekoppelde hash-sets in Java maken.
// LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75);
Hier hebben we een gekoppelde hash-set gemaakt met de naam nummers.
Let op, het deel 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 hij 8 elementen kan opslaan.
- loadFactor - De belastingsfactor van deze hash-set is 0,6. Dit betekent dat wanneer onze hashtabel voor 60% gevuld is, 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 gekoppelde hash-set te maken zonder de capaciteit en belastingsfactor te definiëren. Bijvoorbeeld,
// LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet();
Standaard,
- de capaciteit van de gekoppelde hash-set is 16
- de belastingsfactor zal 0,75 zijn
LinkedHashSet maken vanuit andere collecties
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 evenNumbers = new ArrayList(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Creating a LinkedHashSet from an ArrayList LinkedHashSet numbers = new LinkedHashSet(evenNumbers); System.out.println("LinkedHashSet: " + numbers); ) )
Uitvoer
ArrayList: (2, 4) LinkedHashSet: (2, 4)
Methoden van LinkedHashSet
De LinkedHashSet
klasse biedt methoden waarmee we verschillende bewerkingen op de gekoppelde hash-set kunnen uitvoeren.
Voeg elementen toe aan LinkedHashSet
add()
- voegt het opgegeven element in de gekoppelde hash-set inaddAll()
- voegt alle elementen van de opgegeven verzameling in de gekoppelde hash-set in
Bijvoorbeeld,
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumber = new LinkedHashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet numbers = new LinkedHashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); ) )
Uitvoer
LinkedHashSet: (2, 4, 6) Nieuwe LinkedHashSet: (2, 4, 6, 5)
Toegang tot LinkedHashSet Elements
Om toegang te krijgen tot de elementen van een gekoppelde 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.LinkedHashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Calling the iterator() method Iterator 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 met Iterator: 2, 5, 6,
Opmerking :
hasNext()
geeft terugtrue
als er een volgend element in de gekoppelde hash-set isnext()
geeft het volgende element in de gekoppelde hash-set terug
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 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 verwijderd? true Zijn alle elementen verwijderd? waar
Stel bewerkingen in
De verschillende methoden van de LinkedHashSet
klasse kunnen ook worden gebruikt om verschillende setbewerkingen uit te voeren.
Unie van sets
Twee voeren de vereniging uit tussen twee sets, we kunnen de addAll()
methode gebruiken. Bijvoorbeeld,
import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet 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)
Snijpunt van sets
Om de kruising 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 primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet 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) 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 primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet 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) 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.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet 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 een subset van LinkedHashSet1? waar
Andere methoden van LinkedHashSet
Methode | Omschrijving |
---|---|
clone() | Maakt een kopie van het LinkedHashSet |
contains() | Zoekt LinkedHashSet naar het opgegeven element en retourneert een booleaans resultaat |
isEmpty() | Controleert of het LinkedHashSet leeg is |
size() | Retourneert de grootte van de LinkedHashSet |
clear() | Verwijdert alle elementen uit het LinkedHashSet |
To learn more about LinkedHashSet
methods, visit Java LinkedHashSet (official Java documentation).
LinkedHashSet Vs. HashSet
Both LinkedHashSet
and HashSet
implements the Set
interface. However, there exist some differences between them.
LinkedHashSet
maintains a linked list internally. Due to this, it maintains the insertion order of its elements.- The
LinkedHashSet
class requires more storage thanHashSet
. This is becauseLinkedHashSet
maintains linked lists internally. - The performance of
LinkedHashSet
is slower thanHashSet
. It is because of linked lists present inLinkedHashSet
.
LinkedHashSet Vs. TreeSet
Here are the major differences between LinkedHashSet
and TreeSet
:
- De
TreeSet
klasse implementeert deSortedSet
interface. Daarom worden elementen in een boomset gesorteerd. DeLinkedHashSet
klasse handhaaft echter alleen de invoegvolgorde van de elementen. - A
TreeSet
is meestal langzamer dan aLinkedHashSet
. Het is omdat telkens wanneer een element wordt toegevoegd aan aTreeSet
, het de sorteerbewerking moet uitvoeren. LinkedHashSet
maakt het invoegen van null-waarden mogelijk. We kunnen echter geen null-waarde invoegen inTreeSet
.