V tomto výukovém programu se na příkladech seznámíme s třídou Java LinkedHashSet a jejími metodami.
LinkedHashSet
Třída sbírek rámce Java poskytuje funkcionality obou Hashtable a propojeného struktury seznamu dat.
Implementuje rozhraní Set.
Prvky LinkedHashSet
jsou 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.LinkedHashSet
nejprve 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
LinkedHashSet
Tří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 sadyaddAll()
- 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.Iterator
balíč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í,true
pokud je v propojené hash sadě další prveknext()
vrátí další prvek v propojené hash sadě
Odebrat prvky z HashSet
remove()
- odebere zadaný prvek z propojené hash sadyremoveAll()
- 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 LinkedHashSet
tří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á LinkedHashSet zadaný prvek a vrátí logický výsledek |
isEmpty() | Zkontroluje, zda LinkedHashSet je 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 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
:
TreeSet
Třída implementujeSortedSet
rozhraní. Proto jsou tříděny prvky ve stromové sadě. NicméněLinkedHashSet
třída udržuje pouze pořadí vložení jejích prvků.- A
TreeSet
je obvykle pomalejší než aLinkedHashSet
. Je to proto, že kdykoli je prvek přidán do aTreeSet
, musí provést třídění. LinkedHashSet
umožňuje vložení nulových hodnot. Nemůžeme však vložit hodnotu nullTreeSet
.