Differenze tra HashMap e HashTable in Java
Pubblicato: 2021-06-02Se stai imparando a conoscere Java e le sue applicazioni, devi esserti imbattuto in HashMap e HashTable. Entrambe sono tra le classi più importanti nel framework Java Collection. Li utilizzerai ampiamente durante lo sviluppo con Java, motivo per cui è fondamentale comprenderne le differenze.
Nei seguenti punti, tratteremo in dettaglio l'argomento HashTable vs HashMap e spiegheremo le distinzioni tra i due:
Sommario
Cos'è HashMap?
HashMap è stato nella raccolta di Java dall'introduzione di Java 1.2. Ti permette di eseguire implementazioni di base dell'interfaccia Map di Java. HashMap memorizza i dati in coppie (Chiave, Valore) e per accedervi dovrai utilizzare un indice di un altro tipo, ad esempio un intero.
Qui, usi un oggetto come chiave (indice) per un altro oggetto (valore), da qui l'uso della coppia (chiave, valore). Se aggiungi una chiave duplicata, sostituirà l'elemento della chiave corrispondente.
Caratteristiche di HashMap
Per comprendere le distinzioni tra HashTable e HashMap, in primo luogo, è necessario comprendere le loro caratteristiche. Ti farebbe familiarizzare con le basi di entrambi. HashMap ha le seguenti caratteristiche:
- Fa parte del pacchetto java.util.
- Estende una classe astratta AbstractMap che fornisce un'implementazione incompleta dell'interfaccia Map.
- Oltre all'implementazione dell'interfaccia Map, implementa anche le interfacce serializzabili e clonabili.
- Consente valori duplicati ma non consente chiavi duplicate. Ciò significa che una chiave non può avere più di un valore, ma più chiavi possono avere un unico valore.
- Puoi usare la chiave Null solo una volta in una HashMap, ma puoi usare più valori Null.
- Non fornisce alcuna garanzia sull'ordine della mappa, in particolare se l'ordine rimarrebbe costante nel tempo. HashMap è quasi simile a HashTable ma non è sincronizzato.
- HashSet utilizza HashMap internamente.
Cos'è HashTable?
Si utilizza la classe HashTable per implementare una tabella hash che associa le chiavi ai valori. Qui puoi usare oggetti non nulli come chiave o come valore. Tieni presente che per archiviare e recuperare correttamente gli oggetti da una tabella hash, gli oggetti utilizzati come chiavi devono implementare il metodo hashCode e il metodo equals.
Una tabella hash archivia i dati in un formato matrice e ogni valore di dati ha un valore di indice univoco. Ciò consente di accedere a determinati dati abbastanza rapidamente se si conosce l'indice richiesto.
Caratteristiche di HashTable
HashTable ha le sue caratteristiche peculiari, proprio come HashMap. Tuttavia, queste caratteristiche lo rendono unico e diverso da HashMap per molti aspetti:
- HashTable è abbastanza simile a HashMap ma è sincronizzato.
- Memorizza le coppie chiave-valore in una tabella hash.
- Qui si specifica un oggetto utilizzato come chiave e il valore che si desidera associare allo stesso. Quindi esegui l'hashing della chiave e utilizzi il codice hash generato come indice in cui memorizzi il valore all'interno della tabella.
- La capacità predefinita della classe Hashtable è 11 e il fattore di carico è 0,75.
- HashMap non offre l'enumerazione, mentre Hashtable offre un'enumerazione non fail-fast.
Differenze tra HashMap e HashTable
Ora che conosci i punti salienti particolari di HashMap e HashTable, ora li confronteremo e vedremo le differenze principali tra i due:
HashMap | HashTable |
Non è sincronizzato. Non è possibile condividere molti thread qui senza utilizzare il codice di sincronizzazione corretto perché non è thread-safe. | È sincronizzato. Puoi condividerlo con molti thread perché è thread-safe. |
Eredita la classe AbstractMap. | Eredita la classe Dictionary. |
Qui, l'iteratore è in rapida caduta. | In HashTable, l'enumeratore non è a caduta rapida. |
L'iteratore attraversa la HashMap. | L'enumeratore e l'iteratore attraversano la tabella hash. |
Puoi sincronizzare una HashMap chiamando il codice Mappa m = Collections.synchronisedMap(hashMap); | Le tabelle hash sono sincronizzate internamente e non è possibile annullarne la sincronizzazione con alcun codice. |
È abbastanza veloce. | È relativamente più lento di HashMap. |
HashMap è una nuova classe ed è stata recentemente introdotta in JDK 1.2. | HashTable è una classe legacy. |
Consente più valori nulli e una chiave nulla. | Non consente valori o chiavi nulli. |
Esempio di codifica
Di seguito è riportato un esempio di HashMap e HashTable al lavoro in modo da poter comprendere le distinzioni di HashMap e HashTable.
Ingresso:
importa java.util.*;
importare java.lang.*;
importa java.io.*;
JavaTester di classe pubblica{
public static void main(String args[]){
Hashtable ht=nuovo Hashtable();
ht.put(1,"Uday");
ht.put(1,"Ujjwal");
ht.put(2,"Sumit");
ht.put(3,"Vijay");
System.out.println(“————-Tabella hash————–“);
Set<Intero> keySet = ht.keySet();
for (Chiave intera:keySet) {
System.out.println(chiave + ” “+ht.get(chiave));
}
HashMap hm=nuova HashMap();
hm.put(0,"Uday");
hm.put(4,"Uday"); // puoi avere valori duplicati in una hashmap
hm.put(1,"Sumit");
hm.put(2,"Vijay");
System.out.println(“———–Mappa hash———–“);
Set<Intero> keySet1 = ht.keySet();
for (Chiave intera:keySet) {
System.out.println(chiave + ” “+hm.get(chiave));
}
}
}
Produzione:
Tabella hash:
3 Vijay
2 Sumit
1 Ujjwal
Mappa hash:
0 Oggi
1 Sumit
2 Vijay
4 Oggi
Quando usare HashMap vs HashTable?
Il fattore principale che determina se utilizzerai HashMap o HashTable è la sincronizzazione. Se hai bisogno di un'attività thread-safe, dovresti usare HashTable perché tutti i suoi metodi sono sincronizzati. Tuttavia, è una classe legacy e dovresti evitarli.
Se hai un ambiente multithread, dovresti usare ConcurrentHashMap in quanto è abbastanza simile a HashTable. Ti permette di sincronizzare correttamente HashMap.
Le operazioni sincronizzate causano scarse prestazioni, quindi dovresti evitarle nella maggior parte dei casi. Inoltre, HashMap è adatto per un ambiente non thread, quindi puoi usarlo facilmente.
Impara i corsi di software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.
Conclusione
HashMap e HashTable sono codici Java popolari con funzioni simili. Tuttavia, come puoi vedere, ci sono diverse differenze importanti tra i due. HashMap è una classe Java, mentre HashTable è una struttura dati.
Se sei interessato a saperne di più su Java e altri linguaggi di programmazione, ti consigliamo di controllare il nostro programma Executive PG in Software Development con specializzazione in Full Stack Development .
Cos'è una tabella hash?
La tabella hash è una struttura di dati contenitore ampiamente utilizzata nella programmazione di computer. Le tabelle hash vengono utilizzate per contenere coppie chiave-valore, in cui la chiave può essere qualsiasi oggetto. In quanto contenitore, una tabella hash dovrebbe supportare le operazioni di inserimento e rimozione. Come strumento di ricerca, una tabella hash dovrebbe supportare l'operazione di get. Se una tabella hash dovrebbe essere una struttura di dati del dizionario, dovrebbe anche supportare l'operazione di contiene. Quindi, in generale, una tabella hash è una struttura di dati ampiamente utilizzata per implementare efficacemente le operazioni di inserimento, rimozione, recupero e contenuto. La tabella hash è ampiamente utilizzata per le sue prestazioni veloci.
Che cos'è il framework delle raccolte in Java?
Java Collections Framework è un insieme di interfacce, classi e algoritmi per la piattaforma Java. Fa parte della piattaforma Java dalla versione 1.2. Include interfacce per contenitori, elenchi, code e così via, ma include anche classi per gestire date e orari, una classe per gestire le espressioni regolari, un'altra per gestire l'internazionalizzazione e un'altra ancora per gestire la ricerca nei file.
Qual è la relazione tra una tabella hash e una hashmap in Java?
Una tabella hash è una struttura di dati speciale che associa le chiavi ai valori. Le chiavi possono essere qualsiasi oggetto, ma tutte le chiavi in una determinata tabella hash devono essere comparabili tra loro (ovvero utilizzare le stesse interfacce o compatibili). In Java, una mappa è un tipo specifico di tabella hash implementata utilizzando una TreeMap. Le chiavi in una mappa devono implementare un metodo equals e la mappa utilizza questo metodo per determinare se due chiavi sono uguali o meno. Ciò significa che solo le chiavi sono memorizzate nella mappa e il loro valore associato viene calcolato ogni volta che è necessario.