hashset java tutorial with programming examples
Questo tutorial spiega cos'è HashSet in Java, i metodi HashSet, come implementarlo e iterarlo e altri concetti correlati con l'aiuto di esempi di programmazione:
Un HashSet è una raccolta che archivia gli oggetti. HashSet in Java viene implementato utilizzando la classe 'HashSet' del pacchetto java.util.
Questa classe implementa un'interfaccia impostata. Utilizza HashTable che è un'istanza HashMap per l'archiviazione.
=> Dai un'occhiata alla guida per principianti di Java qui.
Cosa imparerai:
Java HashSet
Alcune delle caratteristiche di HashSet sono riportate di seguito:
- Implementa un'interfaccia Set che ha HashTable come struttura interna. HashTable, a sua volta, è un'istanza HashMap.
- Non preserva l'ordine degli elementi. Gli elementi vengono memorizzati in ordine casuale.
- HashSet non consente valori duplicati.
- Implementa un'interfaccia clonabile e serializzabile oltre all'interfaccia Set.
- Possiamo avere valori nulli in HashSet.
Gerarchia di classi HashSet
La gerarchia della classe HashSet è riportata di seguito:
Come mostrato nella figura sopra, la classe HashSet estende la classe AbstractSet che a sua volta implementa l'interfaccia Set. L'interfaccia set eredita l'interfaccia Collection che a sua volta estende l'interfaccia Iterable.
La versione Java 8 ha introdotto un nuovo metodo 'Spliterator' in HashSet che crea uno spliterator veloce che esegue l'associazione tardiva sugli elementi di HashSet.
La dichiarazione generale della classe HashSet è:
la classe pubblica HashSet estende AbstractSet implementa Set,
Clonabile, serializzabile
Importa HashSet
Possiamo includere la funzionalità HashSet nel programma utilizzando l'istruzione import come mostrato di seguito:
import java.util.HashSet;
o
import java.util. *;
Dichiara HashSet in Java
Possiamo creare un oggetto HashSet in Java come indicato di seguito:
HashSet h = new HashSet ();
La classe HashSet fornisce i seguenti costruttori per creare oggetti.
Prototipo del costruttore | Descrizione | |
---|---|---|
rimuovere | Boolean remove (Object o) | Rimuove l'elemento specificato o da HashSet se fa parte di HashSet. |
HashSet () | Costruttore predefinito per HashSet | |
HashSet (capacità interna) | Costruisce un oggetto HashSet con la 'capacità' data. | |
HashSet (int capacità, float loadFactor) | Costruisce un oggetto HashSet con la 'capacità' e il 'fattore di carico' specificati. | |
HashSet (Collezione c) | Costruisci un oggetto HashSet dalla raccolta data. |
Come mostrato nella tabella precedente, oltre al costruttore predefinito, questa classe fornisce anche i costruttori che prendono come argomenti capacità e fattore di carico e un'altra raccolta. Possiamo creare gli oggetti di questa classe usando uno qualsiasi di questi costruttori.
Inizializza HashSet
Il codice Java seguente mostra la dichiarazione e l'inizializzazione dell'oggetto classe HashSet. In questo programma, creiamo un oggetto classe HashSet da un ArrayList. Inizialmente, creiamo e inizializziamo ArrayList e quindi utilizziamo questo ArrayList per creare e inizializzare un oggetto HashSet.
import java.util.*; class Main{ public static void main(String args()){ //declare and initialize ArrayList ArrayList<String> myList=new ArrayList<String>(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); //Create a HashSet and provide ArrayList in its constructor HashSet<String> mySet=new HashSet(myList); mySet.add('Yellow'); //print the HashSet System.out.println('The HashSet contents:'); Iterator<String> i=mySet.iterator(); while(i.hasNext()) { System.out.print(i.next() + ' '); } } }
Produzione:
Come funziona HashSet internamente in Java?
Internamente, è implementato utilizzando un HashTable. HashTable è un'istanza di HashMap. Ma HashMap è una raccolta di coppie chiave-valore. Allora come archiviamo HashSet in una HashMap?
I valori oggetto di HashSet sono le chiavi per HashMap.
Esempio di Java HashSet
Vediamo un esempio dettagliato di HashSet in Java.
import java.util.*; class Main{ public static void main(String args()){ //Create a HashSet and add elements to it HashSet<String> mySet=new HashSet<String>(); mySet.add('Blue'); mySet.add('Green'); mySet.add('Blue'); mySet.add('Green'); mySet.add('Red'); mySet.add('Brown'); mySet.add('Yellow'); //Iterate through the HashSet and print its elements System.out.println('HashSet contents:'); Iterator<String> itr=mySet.iterator(); while(itr.hasNext()){ System.out.print(itr.next() + ' '); } } }
Produzione:
Qui, usiamo il costruttore predefinito per creare un oggetto HashSet. Quindi utilizzando il metodo add aggiungiamo elementi (colori) a HashSet. Successivamente, usiamo un iteratore per attraversare l'HashSet e stampare il contenuto.
HashSet Iterator
In Java, HashSet può essere attraversato o iterato in due modi, come discusso di seguito.
Senza utilizzare Iterator
Qui, non definiamo un iteratore su HashSet. Invece, usiamo un ciclo forEach. Il seguente programma mostra l'attraversamento di HashSet utilizzando un ciclo forEach.
import java.util.HashSet; import java.util.Set; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use foreach loop to iterate through the HashSet System.out.println('HashSet contents:'); for (String city : cities_HashSet) { System.out.print(city + ' '); } } }
Produzione:
Utilizzando Iterator
Il prossimo approccio all'iterazione consiste nell'usare un iteratore. Qui, definiamo un iteratore per la classe HashSet e poi lo attraversiamo.
Il seguente programma mostra questo approccio.
import java.util.HashSet; import java.util.Set; import java.util.Iterator; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use iterator to iterate through the HashSet System.out.println('HashSet contents using Iterator:'); Iterator<String> iter = cities_HashSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Produzione:
Metodi / API HashSet
La tabella seguente mostra i metodi forniti dalla classe HashSet. Abbiamo fornito il prototipo e la descrizione per ogni metodo. Come visto, abbiamo metodi per operazioni di base come aggiungi, rimuovi, ridimensiona, ecc. Così come per altri metodi per controllare contenuti, vuoto, iteratore, divisore, ecc.
Metodo | Metodo Prototipo | Descrizione |
---|---|---|
Inserisci | Boolean add (E e) | Aggiunge un dato elemento e all'HashSet se non è già presente. |
chiaro | Void clear () | Cancella o rimuove tutti gli elementi da HashSet |
clone | Oggetto clone () | Viene utilizzato per restituire una copia superficiale di questa istanza HashSet: gli elementi stessi non vengono clonati. |
contiene | Boolean contiene (Object o) | Controlla se HashSet contiene l'oggetto specificato o e restituisce true in caso affermativo. |
è vuoto | Boolean isEmpty () | Controlla se HashSet è vuoto. Restituisce vero se sì. |
iteratore | Iteratore iteratore () | Restituisce un iteratore utilizzato per attraversare HashSet. |
taglia | Dimensione int () | Restituisce la dimensione o il numero di elementi presenti in HashSet. |
splitter | Spliterator spliterator () | Restituisce lo spliteratore fail-fast e late-binding per attraversare l'HashSet. Questo metodo è stato introdotto in Java 8. |
Abbiamo descritto i metodi forniti dalla classe HashSet, ora implementiamo un esempio che dimostri i metodi principali della classe.
Il seguente programma Java mostra i metodi di questa classe.
import java.util.*; class Main{ public static void main(String args()){ //create a HashSet and initialize it HashSet<String> colors_set=new HashSet<String>(); colors_set.add('Red'); colors_set.add('Green'); colors_set.add('Blue'); colors_set.add('Cyan'); System.out.println('Initial HashSet: '+colors_set); //remove() method => remove specified element colors_set.remove('Red'); System.out.println('
HashSet after remove(Red): '+colors_set); //declare and initialize another list HashSet<String> colors_hash=new HashSet<String>(); colors_hash.add('Yellow'); colors_hash.add('Magenta'); //addAll() method => add another HashSet to existing colors_set.addAll(colors_hash); System.out.println('
HashSet after add(colors_hash): '+colors_set); //removeAll() method => remove all elements specified in the argument colors_set.removeAll(colors_hash); System.out.println('
HashSet after removeAll(colors_hash) method: '+colors_set); //removeIf() => remove if given condition is fulfilled colors_set.removeIf(str->str.contains('Green')); System.out.println('
HashSet after removeIf(contains(Green)) method: '+colors_set); //clear() => delete all elements from the HashSet colors_set.clear(); System.out.println('
HashSet after clear() method: '+colors_set); } }
Produzione:
Converti HashSet in array
Possiamo usare il metodo toArray () di HashSet per convertire il dato HashSet in un array. Si noti che il tipo di dati e la dimensione dell'array devono corrispondere a quelli di HashSet.
Il seguente programma Java mostra questa conversione.
import java.util.HashSet; class Main{ public static void main(String() args) { // Create a HashSet & inintialize it HashSet<String> num_HashSet = new HashSet<String>(); num_HashSet.add('One'); num_HashSet.add('Two'); num_HashSet.add('Three'); num_HashSet.add('Four'); // Print HashSet contents System.out.println('HashSet contents: '+ num_HashSet); // Declare an array with size = HashSet size String() numArray = new String(num_HashSet.size()); //use toArray method to convert HashSet to an array num_HashSet.toArray(numArray); // Print Array System.out.println('Array from HashSet: '); for(String val : numArray){ System.out.print(val + ' '); } } }
Produzione:
Ordina un HashSet
Possiamo ordinare un HashSet in Java. Gli elementi HashSet non vengono ordinati originariamente poiché non mantiene l'ordine degli elementi. Possiamo seguire due approcci per ordinare un HashSet in Java.
Utilizzo del metodo Collections.sort ()
In questo approccio, convertiamo l'HashSet in un elenco. Quindi, usiamo il metodo Collections.sort () per ordinare l'elenco. Questo elenco viene quindi stampato.
import java.util.*; public class Main { public static void main(String args()) { // Create a HashSet & initialize it HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet: ' + cities_HashSet); // Convert HashSet to ArrayList List<String> cities_list = new ArrayList<String>(cities_HashSet); // Use Collections.sort () method to sort the list Collections.sort(cities_list); // Print the Sorted ArrayList (HashSet) System.out.println('Sorted HashSet:'+ cities_list); } }
Produzione:
qa lead intervista domande e risposte pdf
Convertendo HashSet in TreeSet
Utilizzando questo approccio convertiamo HashSet in TreeSet. TreeSet mantiene l'ordine degli elementi. Quindi, quando HashSet viene convertito in TreeSet, gli elementi vengono messi in ordine.
Il seguente programma Java mostra questa conversione ordinando così l'HashSet.
import java.util.*; public class Main { public static void main(String args()) { // Create and initialize a HashSet HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet:'+ cities_HashSet); // Sort HashSet using TreeSet TreeSet<String> treeSet = new TreeSet<String>(cities_HashSet); // Print the sorted HashSet System.out.println('HashSet sorted using using TreeSet:' + treeSet); } }
Produzione:
Parliamo ora di alcune delle differenze tra HashSet e HashMap. Discuteremo anche le differenze tra HashSet e TreeSet.
HashSet Vs HashMap
La tabella seguente mostra le principali differenze tra HashSet e HashMap.
HashSet | HashMap |
---|---|
Gli oggetti vengono aggiunti utilizzando il metodo Add (). | HashMap utilizza il metodo put () per aggiungere coppie chiave-valore. |
Implementa l'interfaccia del set. | Implementa l'interfaccia della mappa. |
Memorizza oggetti di un tipo particolare. | Archivia coppie di dati chiave-valore. |
Non consente valori duplicati di oggetti. | Consente valori duplicati ma non chiavi duplicate. |
Può avere un singolo valore null. | Consente una singola chiave null e più valori null. |
Utilizza internamente l'oggetto HashMap per la memorizzazione dei dati. | Utilizza la tecnica di hashing per la memorizzazione dei dati. |
È più lento rispetto a HashMap. | HashMap è più veloce. |
HashSet Vs TreeSet
Di seguito sono elencate le differenze tra HashSet e TreeSet.
HashSet | TreeSet |
---|---|
Ha funzionalità limitate. | Fornisce molte funzioni che offrono varie operazioni e semplifica l'uso di Treeset rispetto a HashSet. |
Non mantiene l'ordine degli elementi. Memorizza gli oggetti in ordine casuale. | Mantiene l'ordine naturale degli elementi. |
Consente valori nulli. | Non può avere valori nulli. |
Offre prestazioni migliori poiché richiede tempo costante per le operazioni di base. | Offre un costo in tempo reale per le operazioni di base |
Molto più veloce di Treeset. | Il set di alberi è più lento. |
Implementato internamente utilizzando HashMap. | Il set di alberi è implementato internamente utilizzando la mappa ad albero navigabile. |
Utilizza il metodo equals () per il confronto. | Utilizza il metodo compareTo () per il confronto. |
Domande frequenti
D # 1) Come funziona HashSet in Java?
Risposta: HashSet in Java utilizza HashMap per memorizzare l'oggetto. Un oggetto HashMap viene creato quando viene creato un oggetto HashSet. Gli elementi o gli oggetti immessi nell'HashSet vengono memorizzati come chiavi nell'HashMap.
D # 2) HashSet è ordinato in Java?
Risposta: No, non è ordinato in Java. Memorizza gli elementi in ordine casuale.
D # 3) HashSet consente null?
Risposta: sì, consente un singolo valore nullo. Ciò significa che solo un singolo elemento o oggetto può essere nullo e non tutti.
D # 4) Perché HashSet viene utilizzato in Java?
Risposta: Viene utilizzato per memorizzare le coppie chiave-valore in Java. È simile a HashTable con l'eccezione che HashSet non è sincronizzato e, a differenza di HashTable, consente valori null e una singola chiave null. HashSet non è ordinato e può essere utilizzato per memorizzare oggetti non ordinati o quando l'ordine degli oggetti non è richiesto.
D # 5) HashSet è sincronizzato in Java?
Risposta: HashSet non è sincronizzato in Java. Inoltre, non è thread-safe. Ma possiamo renderlo sincronizzato usando il metodo synchronizedSet ().
Conclusione
HashSet è una raccolta contenente oggetti in ordine casuale. La classe HashSet che implementa HashSet in Java utilizza internamente HashTable che implementa HashMap.
Abbiamo visto la dichiarazione e l'inizializzazione di HashSet insieme ai metodi forniti dalla classe HashSet.
=> Leggere attraverso la serie di formazione Easy Java.
Lettura consigliata
- Java Double - Tutorial con esempi di programmazione
- Tutorial Java Float con esempi di programmazione
- Java Reverse String: tutorial con esempi di programmazione
- TreeSet in Java: tutorial con esempi di programmazione
- Tutorial JAVA per principianti: oltre 100 tutorial video Java pratici
- Tutorial sul metodo Java String contains () con esempi
- TreeMap in Java - Tutorial con esempi di Java TreeMap
- Jagged Array in Java - Tutorial con esempi