Java LinkedHashSet

V tomto výukovém programu se na příkladech seznámíme s třídou Java LinkedHashSet a jejími metodami.

LinkedHashSetTřída sbírek rámce Java poskytuje funkcionality obou Hashtable a propojeného struktury seznamu dat.

Implementuje rozhraní Set.

Prvky LinkedHashSetjsou uloženy v hašovacích tabulkách podobných HashSetu.

Propojené hash sady však interně udržují dvojitě propojený seznam pro všechny jeho prvky. Propojený seznam definuje pořadí, ve kterém jsou prvky vkládány do hash tabulek.

Vytvořte LinkedHashSet

Abychom mohli vytvořit propojenou hashovou sadu, musíme java.util.LinkedHashSetnejprve importovat balíček.

Jakmile naimportujeme balíček, můžeme v Java vytvořit propojené hash sady.

 // LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75); 

Zde jsme vytvořili propojenou hashovou sadu pojmenovaných čísel.

Všimněte si, část new LinkedHashSet(8, 0.75). Zde je prvním parametrem kapacita a druhým parametrem je loadFactor .

  • kapacita - kapacita této hash sady je 8. To znamená, že může uložit 8 prvků.
  • loadFactor - Faktor zatížení této hash sady je 0,6. To znamená, že kdykoli je naše hash tabulka naplněna o 60%, prvky jsou přesunuty do nové hash tabulky s dvojnásobnou velikostí původní hash tabulky.

Výchozí kapacita a faktor zatížení

Je možné vytvořit propojenou sadu hash, aniž byste definovali její kapacitu a faktor zatížení. Například,

 // LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet(); 

Ve výchozím stavu,

  • kapacita propojené sady hash bude 16
  • činitel zatížení bude 0,75

Vytváření LinkedHashSet z jiných kolekcí

Zde je způsob, jak můžeme vytvořit propojenou hashovací sadu obsahující všechny prvky jiných kolekcí.

 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); ) ) 

Výstup

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Metody LinkedHashSet

LinkedHashSetTřída poskytuje metody, které nám umožní provádět různé operace na připojeném hash set.

Vložit prvky do LinkedHashSet

  • add() - vloží zadaný prvek do propojené hash sady
  • addAll() - vloží všechny prvky určené kolekce do propojené hash sady

Například,

 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); ) ) 

Výstup

 LinkedHashSet: (2, 4, 6) Nová LinkedHashSet: (2, 4, 6, 5) 

Přístup k prvkům LinkedHashSet

Pro přístup k prvkům propojené hash sady můžeme použít iterator()metodu. Aby bylo možné použít tuto metodu, musíme java.util.Iteratorbalíček importovat . Například,

 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(", "); ) ) ) 

Výstup

 LinkedHashSet: (2, 5, 6) LinkedHashSet pomocí Iterátoru: 2, 5, 6, 

Poznámka :

  • hasNext()vrátí, truepokud je v propojené hash sadě další prvek
  • next() vrátí další prvek v propojené hash sadě

Odebrat prvky z HashSet

  • remove() - odebere zadaný prvek z propojené hash sady
  • removeAll() - odebere všechny prvky z propojené hash sady

Například,

 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); ) ) 

Výstup

LinkedHashSet: (2, 5, 6) Je 5 odstraněno? true Jsou všechny prvky odstraněny? skutečný

Nastavit operace

Různé metody LinkedHashSettřídy lze také použít k provedení různých operací sady.

Unie sad

Dva provést sjednocení mezi dvěma sadami, můžeme použít addAll()metodu. Například,

 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); ) ) 

Výstup

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Union is: (1, 3, 2, 4) 

Průnik množin

K provedení průniku mezi dvěma množinami můžeme použít retainAll()metodu. Například

 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); ) ) 

Výstup

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Křižovatka je: (2) 

Rozdíl sad

K výpočtu rozdílu mezi těmito dvěma sadami můžeme použít removeAll()metodu. Například,

 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); ) ) 

Výstup

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Rozdíl: (2) 

Podmnožina

K ověření, zda je množina podmnožinou jiné množiny, můžeme použít containsAll()metodu. Například,

 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); ) ) 

Výstup

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Je LinkedHashSet2 podmnožinou LinkedHashSet1? skutečný

Další metody LinkedHashSet

Metoda Popis
clone() Vytvoří kopii souboru LinkedHashSet
contains() Vyhledá LinkedHashSetzadaný prvek a vrátí logický výsledek
isEmpty() Zkontroluje, zda LinkedHashSetje prázdná
size() Vrátí velikost LinkedHashSet
clear() Odebere všechny prvky z 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:

  • TreeSetTřída implementuje SortedSetrozhraní. Proto jsou tříděny prvky ve stromové sadě. Nicméně LinkedHashSettřída udržuje pouze pořadí vložení jejích prvků.
  • A TreeSetje obvykle pomalejší než a LinkedHashSet. Je to proto, že kdykoli je prvek přidán do a TreeSet, musí provést třídění.
  • LinkedHashSetumožňuje vložení nulových hodnot. Nemůžeme však vložit hodnotu null TreeSet.

Zajímavé články...