Java LinkedHashSet

In deze zelfstudie leren we met behulp van voorbeelden over de Java LinkedHashSet-klasse en zijn methoden.

De LinkedHashSetklasse van het Java-verzamelingsraamwerk biedt functionaliteiten van zowel de hashtabel als de gekoppelde lijstgegevensstructuur.

Het implementeert de Set-interface.

Elementen van LinkedHashSetworden 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.LinkedHashSetpakket 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 LinkedHashSetklasse 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 in
  • addAll() - 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.Iteratorpakket 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 terug trueals er een volgend element in de gekoppelde hash-set is
  • next() geeft het volgende element in de gekoppelde hash-set terug

Elementen verwijderen uit HashSet

  • remove() - verwijdert het opgegeven element uit de gekoppelde hash-set
  • removeAll() - 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 LinkedHashSetklasse 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 LinkedHashSetnaar het opgegeven element en retourneert een booleaans resultaat
isEmpty() Controleert of het LinkedHashSetleeg 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 than HashSet. This is because LinkedHashSet maintains linked lists internally.
  • The performance of LinkedHashSet is slower than HashSet. It is because of linked lists present in LinkedHashSet.

LinkedHashSet Vs. TreeSet

Here are the major differences between LinkedHashSet and TreeSet:

  • De TreeSetklasse implementeert de SortedSetinterface. Daarom worden elementen in een boomset gesorteerd. De LinkedHashSetklasse handhaaft echter alleen de invoegvolgorde van de elementen.
  • A TreeSetis meestal langzamer dan a LinkedHashSet. Het is omdat telkens wanneer een element wordt toegevoegd aan a TreeSet, het de sorteerbewerking moet uitvoeren.
  • LinkedHashSetmaakt het invoegen van null-waarden mogelijk. We kunnen echter geen null-waarde invoegen in TreeSet.

Interessante artikelen...