Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

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.

Java LinkedHashSet beheersen: Kenmerken, methoden en praktische voorbeelden

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 set
  • addAll() - 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() retourneert true als er een volgend element in de linked hash set is
  • next() retourneert het volgende element in de linked hash set

Elementen verwijderen uit HashSet

  • remove() - verwijdert het gespecificeerde element uit de linked hash set
  • removeAll() - 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

MethodeBeschrijving
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.

  • LinkedHashSet behoudt intern een linked list. Hierdoor behoudt het de invoegvolgorde van de elementen.
  • De LinkedHashSet-klasse vereist meer opslag dan HashSet. Dit is omdat LinkedHashSet intern linked lists behoudt.
  • De prestaties van LinkedHashSet zijn langzamer dan HashSet. Dit is door de linked lists in LinkedHashSet.


LinkedHashSet vs. TreeSet

Hier zijn de belangrijkste verschillen tussen LinkedHashSet en TreeSet:

  • De TreeSet-klasse implementeert de SortedSet-interface. Daarom zijn elementen in een tree set gesorteerd. Echter, de LinkedHashSet-klasse behoudt alleen de invoegvolgorde van de elementen.
  • Een TreeSet is meestal langzamer dan een LinkedHashSet. Dit is omdat telkens wanneer een element aan een TreeSet wordt toegevoegd, de sorteeroperatie moet worden uitgevoerd.
  • LinkedHashSet staat de invoeging van null-waarden toe. Echter, we kunnen geen null-waarde invoegen in TreeSet.

Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java if…else beheersen: control flow uitgelegd
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java Strings beheersen: aanmaken, methodes en best practices
  6. Java interfaces meesteren: concepten, implementatie en best practices
  7. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  8. Java Try-with-resources meesteren: automatische resource management uitgelegd
  9. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  10. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  11. Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList