Java LinkedHashSet

In questo tutorial, impareremo a conoscere la classe LinkedHashSet Java e i suoi metodi con l'aiuto di esempi.

La LinkedHashSetclasse del framework delle collezioni Java fornisce le funzionalità sia della tabella hash che della struttura dei dati dell'elenco collegato.

Implementa l'interfaccia Set.

Gli elementi di LinkedHashSetsono memorizzati in tabelle hash simili a HashSet.

Tuttavia, i set di hash collegati mantengono internamente un elenco a doppio collegamento per tutti i suoi elementi. L'elenco collegato definisce l'ordine in cui gli elementi vengono inseriti nelle tabelle hash.

Crea un LinkedHashSet

Per creare un set di hash collegato, dobbiamo java.util.LinkedHashSetprima importare il pacchetto.

Una volta importato il pacchetto, ecco come possiamo creare set di hash collegati in Java.

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

Qui abbiamo creato un set di hash collegato denominato numeri.

Nota, la parte new LinkedHashSet(8, 0.75). Qui, il primo parametro è la capacità e il secondo parametro è loadFactor .

  • capacità - La capacità di questo set di hash è 8. Ciò significa che può memorizzare 8 elementi.
  • loadFactor - Il fattore di carico di questo set di hash è 0,6. Ciò significa che, ogni volta che la nostra tabella hash viene riempita del 60%, gli elementi vengono spostati in una nuova tabella hash di dimensioni doppie rispetto alla tabella hash originale.

Capacità e fattore di carico predefiniti

È possibile creare un set di hash collegato senza definirne la capacità e il fattore di carico. Per esempio,

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

Per impostazione predefinita,

  • la capacità del set di hash collegato sarà 16
  • il fattore di carico sarà 0,75

Creazione di LinkedHashSet da altre raccolte

Ecco come possiamo creare un set di hash collegato contenente tutti gli elementi di altre raccolte.

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

Produzione

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

Metodi di LinkedHashSet

La LinkedHashSetclasse fornisce metodi che ci consentono di eseguire varie operazioni sul set di hash collegato.

Inserisci elementi in LinkedHashSet

  • add() - inserisce l'elemento specificato nel set di hash collegato
  • addAll() - inserisce tutti gli elementi della raccolta specificata nel set di hash collegato

Per esempio,

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

Produzione

 LinkedHashSet: (2, 4, 6) Nuovo LinkedHashSet: (2, 4, 6, 5) 

Accedi agli elementi LinkedHashSet

Per accedere agli elementi di un set di hash collegato, possiamo utilizzare il iterator()metodo. Per utilizzare questo metodo, dobbiamo importare il java.util.Iteratorpacchetto. Per esempio,

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

Produzione

 LinkedHashSet: (2, 5, 6) LinkedHashSet utilizzando Iterator: 2, 5, 6, 

Nota :

  • hasNext()restituisce truese è presente un elemento successivo nel set di hash collegato
  • next() restituisce l'elemento successivo nel set di hash collegato

Rimuovi elementi da HashSet

  • remove() - rimuove l'elemento specificato dal set di hash collegato
  • removeAll() - rimuove tutti gli elementi dal set di hash collegato

Per esempio,

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

Produzione

LinkedHashSet: (2, 5, 6) 5 è stato rimosso? true Sono stati rimossi tutti gli elementi? vero

Imposta operazioni

I vari metodi della LinkedHashSetclasse possono essere utilizzati anche per eseguire varie operazioni sugli insiemi.

Unione di insiemi

Due eseguono l'unione tra due set, possiamo usare il addAll()metodo. Per esempio,

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

Produzione

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

Intersezione di insiemi

Per eseguire l'intersezione tra due insiemi, possiamo usare il retainAll()metodo. Per esempio

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

Produzione

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) L'intersezione è: (2) 

Differenza di insiemi

Per calcolare la differenza tra i due insiemi, possiamo usare il removeAll()metodo. Per esempio,

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

Produzione

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Differenza: (2) 

Sottoinsieme

Per verificare se un insieme è o meno un sottoinsieme di un altro insieme, possiamo usare il containsAll()metodo. Per esempio,

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

Produzione

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) LinkedHashSet2 è un sottoinsieme di LinkedHashSet1? vero

Altri metodi di LinkedHashSet

Metodo Descrizione
clone() Crea una copia del file LinkedHashSet
contains() Cerca l' LinkedHashSetelemento specificato e restituisce un risultato booleano
isEmpty() Controlla se LinkedHashSetè vuoto
size() Restituisce la dimensione del file LinkedHashSet
clear() Rimuove tutti gli elementi dal file 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:

  • La TreeSetclasse implementa l' SortedSetinterfaccia. Ecco perché gli elementi in un insieme di alberi vengono ordinati. Tuttavia, la LinkedHashSetclasse mantiene solo l'ordine di inserimento dei suoi elementi.
  • A TreeSetè solitamente più lento di a LinkedHashSet. È perché ogni volta che un elemento viene aggiunto a TreeSet, deve eseguire l'operazione di ordinamento.
  • LinkedHashSetpermette l'inserimento di valori nulli. Tuttavia, non possiamo inserire un valore nullo in TreeSet.

Articoli interessanti...