Sada Java LinkedHashSet

V tomto tutoriále sa pomocou príkladov dozvieme o triede Java LinkedHashSet a jej metódach.

LinkedHashSetTrieda zbierok rámca Java poskytuje funkcionality oboch Hashtable a prepojeného štruktúry zoznamu dát.

Implementuje rozhranie Set.

Prvky LinkedHashSetsú 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.LinkedHashSetbalí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

LinkedHashSetTrieda 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 sady
  • addAll() - 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.Iteratorbalíč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, trueak je v prepojenej hashovej množine ďalší prvok
  • next() vráti nasledujúci prvok v prepojenej hashovej množine

Odstrániť prvky z HashSet

  • remove() - odstráni zadaný prvok z prepojenej hashovacej sady
  • removeAll() - 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 LinkedHashSetvykonanie 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á LinkedHashSetzadaný prvok a vráti boolovský výsledok
isEmpty() Skontroluje, či LinkedHashSetje 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 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:

  • TreeSetTrieda implementuje SortedSetrozhranie. Preto sú prvky v množine stromov zoradené. Avšak LinkedHashSettrieda udržiava iba poradí vloženie jej prvkov.
  • A TreeSetje zvyčajne pomalšie ako a LinkedHashSet. Je to tak preto, lebo vždy, keď je prvok pridaný do a TreeSet, musí vykonať triediacu operáciu.
  • LinkedHashSetumožňuje vloženie nulových hodnôt. Nemôžeme však vložiť nulovú hodnotu do TreeSet.

Zaujímavé články...