V tomto tutoriále sa pomocou príkladov dozvieme o triede Java LinkedHashSet a jej metódach.
LinkedHashSet
Trieda zbierok rámca Java poskytuje funkcionality oboch Hashtable a prepojeného štruktúry zoznamu dát.
Implementuje rozhranie Set.
Prvky LinkedHashSet
sú uložené v hašovacích tabuľkách podobných HashSetu.
Prepojené sady hashov však interne udržiavajú zoznam dvojnásobne prepojených všetkých svojich prvkov. Prepojený zoznam definuje poradie, v akom sa prvky vkladajú do hash tabuliek.
Vytvorte sadu LinkedHashSet
Aby sme mohli vytvoriť prepojenú množinu hashov, musíme najskôr importovať java.util.LinkedHashSet
balík.
Po importovaní balíka tu môžeme vytvoriť prepojené hašovacie sady v Jave.
// LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75);
Tu sme vytvorili prepojenú hashovú množinu s názvom čísla.
Všimnite si, časť new LinkedHashSet(8, 0.75)
. Tu je prvým parametrom kapacita a druhým parametrom je loadFactor .
- kapacita - kapacita tejto hashovacej sady je 8. To znamená, že môže uložiť 8 prvkov.
- loadFactor - Faktor zaťaženia tejto sady hash je 0,6. To znamená, že kedykoľvek je naša hash tabuľka naplnená o 60%, prvky sú presunuté do novej hash tabuľky s dvojnásobnou veľkosťou ako pôvodná hash tabuľka.
Predvolená kapacita a faktor zaťaženia
Je možné vytvoriť prepojenú množinu hash bez definovania jej kapacity a koeficientu zaťaženia. Napríklad,
// LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet();
Predvolene,
- kapacita prepojenej sady hashov bude 16
- činiteľ zaťaženia bude 0,75
Vytváranie LinkedHashSet z iných zbierok
Týmto spôsobom môžeme vytvoriť prepojenú hashovaciu sadu obsahujúcu všetky prvky iných zbierok.
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ýkon
ArrayList: (2, 4) LinkedHashSet: (2, 4)
Metódy LinkedHashSet
LinkedHashSet
Trieda poskytuje metódy, ktoré nám umožnia vykonávať rôzne operácie na pripojenom hash set.
Vložte prvky do LinkedHashSet
add()
- vloží zadaný prvok do prepojenej hashovacej sadyaddAll()
- vloží všetky prvky určenej kolekcie do prepojenej hašovacej sady
Naprí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ýkon
LinkedHashSet: (2, 4, 6) Nová LinkedHashSet: (2, 4, 6, 5)
Prístup k prvkom LinkedHashSet
Na prístup k prvkom prepojenej množiny hashov môžeme použiť iterator()
metódu. Aby sme mohli použiť túto metódu, musíme java.util.Iterator
balíček importovať . Naprí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ýkon
LinkedHashSet: (2, 5, 6) LinkedHashSet pomocou Iterátora: 2, 5, 6,
Poznámka :
hasNext()
vráti,true
ak je v prepojenej hashovej množine ďalší prvoknext()
vráti nasledujúci prvok v prepojenej hashovej množine
Odstrániť prvky z HashSet
remove()
- odstráni zadaný prvok z prepojenej hashovacej sadyremoveAll()
- odstráni všetky prvky z prepojenej hashovacej sady
Naprí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ýkon
LinkedHashSet: (2, 5, 6) Je 5 odstránené? true Sú odstránené všetky prvky? pravda
Nastaviť operácie
Na LinkedHashSet
vykonanie rôznych množinových operácií je možné použiť aj rôzne metódy triedy.
Únia súprav
Dva vykonávajú spojenie medzi dvoma množinami, môžeme použiť addAll()
metódu. Naprí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ýkon
LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Union is: (1, 3, 2, 4)
Priesečník množín
Na vykonanie priesečníka medzi dvoma množinami môžeme použiť retainAll()
metódu. Naprí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ýkon
LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Priesečník je: (2)
Rozdiel skupín
Na výpočet rozdielu medzi týmito dvoma množinami môžeme použiť removeAll()
metódu. Naprí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ýkon
LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Rozdiel: (2)
Podmnožina
Pomocou containsAll()
metódy môžeme skontrolovať, či je množina podmnožinou inej množiny . Naprí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ýkon
LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Je LinkedHashSet2 podskupinou LinkedHashSet1? pravda
Ďalšie metódy súboru LinkedHashSet
Metóda | Popis |
---|---|
clone() | Vytvorí kópiu súboru LinkedHashSet |
contains() | Vyhľadá LinkedHashSet zadaný prvok a vráti boolovský výsledok |
isEmpty() | Skontroluje, či LinkedHashSet je prázdny |
size() | Vráti veľkosť súboru LinkedHashSet |
clear() | Odstráni všetky 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
Trieda implementujeSortedSet
rozhranie. Preto sú prvky v množine stromov zoradené. AvšakLinkedHashSet
trieda udržiava iba poradí vloženie jej prvkov.- A
TreeSet
je zvyčajne pomalšie ako aLinkedHashSet
. Je to tak preto, lebo vždy, keď je prvok pridaný do aTreeSet
, musí vykonať triediacu operáciu. LinkedHashSet
umožňuje vloženie nulových hodnôt. Nemôžeme však vložiť nulovú hodnotu doTreeSet
.