In questo tutorial, impareremo a conoscere la classe LinkedHashSet Java e i suoi metodi con l'aiuto di esempi.
La LinkedHashSet
classe 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 LinkedHashSet
sono 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.LinkedHashSet
prima 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 LinkedHashSet
classe 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 collegatoaddAll()
- 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.Iterator
pacchetto. 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()
restituiscetrue
se è presente un elemento successivo nel set di hash collegatonext()
restituisce l'elemento successivo nel set di hash collegato
Rimuovi elementi da HashSet
remove()
- rimuove l'elemento specificato dal set di hash collegatoremoveAll()
- 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 LinkedHashSet
classe 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' LinkedHashSet elemento 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 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
:
- La
TreeSet
classe implementa l'SortedSet
interfaccia. Ecco perché gli elementi in un insieme di alberi vengono ordinati. Tuttavia, laLinkedHashSet
classe mantiene solo l'ordine di inserimento dei suoi elementi. - A
TreeSet
è solitamente più lento di aLinkedHashSet
. È perché ogni volta che un elemento viene aggiunto aTreeSet
, deve eseguire l'operazione di ordinamento. LinkedHashSet
permette l'inserimento di valori nulli. Tuttavia, non possiamo inserire un valore nullo inTreeSet
.