Java HashSet

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 HashSetclasse 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.HashSetprima 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 HashSetclasse fornisce vari metodi che ci consentono di eseguire varie operazioni sul set.

Inserisci elementi in HashSet

  • add() - inserisce l'elemento specificato nel set
  • addAll() - 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.Iteratorpacchetto. 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 set
  • removeAll() - 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 HashSetclasse 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' HashSetelemento 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.

HashSetnon 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.

Articoli interessanti...