In questo tutorial, impareremo a conoscere la classe Java HashSet. Impareremo a conoscere diversi metodi e operazioni di set di hash con l'aiuto di esempi.
La HashSet
classe del framework Java Collections fornisce le funzionalità della struttura dati della tabella hash.
Implementa l'interfaccia Set.
Creazione di un HashSet
Per creare un set di hash, dobbiamo java.util.HashSet
prima importare il pacchetto.
Una volta importato il pacchetto, ecco come possiamo creare set di hash in Java.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Qui, abbiamo creato un set di hash denominato numbers
.
Notate, la parte è nuova HashSet(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 il nostro set di hash viene riempito 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 una tabella hash senza definirne la capacità e il fattore di carico. Per esempio,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Per impostazione predefinita,
- la capacità del set di hash sarà 16
- il fattore di carico sarà 0,75
Metodi di HashSet
La HashSet
classe fornisce vari metodi che ci consentono di eseguire varie operazioni sul set.
Inserisci elementi in HashSet
add()
- inserisce l'elemento specificato nel setaddAll()
- inserisce nel set tutti gli elementi della collezione specificata
Per esempio,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Produzione
HashSet: (2, 4, 6) Nuovo HashSet: (2, 4, 5, 6)
Accedi agli elementi di HashSet
Per accedere agli elementi di un set di hash, possiamo utilizzare il iterator()
metodo. Per utilizzare questo metodo, dobbiamo importare il java.util.Iterator
pacchetto. Per esempio,
import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Produzione
HashSet: (2, 5, 6) HashSet utilizzando Iterator: 2, 5, 6,
Rimuovi elementi
remove()
- rimuove l'elemento specificato dal setremoveAll()
- rimuove tutti gli elementi dal set
Per esempio,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using 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
HashSet: (2, 5, 6) 5 è stato rimosso? true Sono stati rimossi tutti gli elementi? vero
Imposta operazioni
I vari metodi della HashSet
classe possono essere utilizzati anche per eseguire varie operazioni sugli insiemi.
Unione di insiemi
Per eseguire l'unione tra due insiemi, possiamo usare il addAll()
metodo. Per esempio,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Produzione
HashSet1: (2, 4) HashSet2: (1, 3) Union è: (1, 2, 3, 4)
Intersezione di insiemi
Per eseguire l'intersezione tra due insiemi, possiamo usare il retainAll()
metodo. Per esempio
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Produzione
HashSet1: (2, 3) HashSet2: (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.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Produzione
HashSet1: (2, 3, 5) HashSet2: (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.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Produzione
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) HashSet2 è un sottoinsieme di HashSet1? vero
Altri metodi di HashSet
Metodo | Descrizione |
---|---|
clone() | Crea una copia del file HashSet |
contains() | Cerca l' HashSet elemento specificato e restituisce un risultato booleano |
isEmpty() | Controlla se HashSet è vuoto |
size() | Restituisce la dimensione del file HashSet |
clear() | Rimuove tutti gli elementi dal file HashSet |
Per ulteriori informazioni sui metodi HashSet, visitare Java HashSet (documentazione ufficiale Java).
Perché HashSet?
In Java, HashSet
è comunemente usato se dobbiamo accedere agli elementi in modo casuale. È perché gli elementi in una tabella hash sono accessibili utilizzando codici hash.
Il codice hash di un elemento è un'identità univoca che aiuta a identificare l'elemento in una tabella hash.
HashSet
non può contenere elementi duplicati. Quindi, ogni elemento del set di hash ha un codice hash univoco.
Nota: HashSet non è sincronizzato. Cioè se più thread accedono al set di hash allo stesso tempo e uno dei thread modifica il set di hash. Quindi deve essere sincronizzato esternamente.