Differenza tra HashMap e Hashtable in Java

Autore: Laura McKinney
Data Della Creazione: 2 Aprile 2021
Data Di Aggiornamento: 23 Aprile 2024
Anonim
Difference between HashMap and Hashtable in Java
Video: Difference between HashMap and Hashtable in Java

Contenuto


HashMap e Hashtable, entrambi sono usati per rappresentare a gruppo di oggetti che sono rappresentati in paio. Ogni viene chiamata coppia Iscrizione oggetto. Il collezione of Entries è riferito dall'oggetto di HashMap e Hashtable. Le chiavi in ​​una raccolta devono essere uniche o distintive. La differenza tra HashMap e Hashtable è quella HashMap implementa in particolare l'interfaccia della mappa mentre, il tabella hash estende la classe Dictionary (legacy class) che è stata riprogettata per implementare l'interfaccia Map. L'altra differenza importante è che sono gli oggetti di HashMap non sincronizzato mentre, gli oggetti di Hashtable è sincronizzato.

Vediamo la tabella di confronto mostrata di seguito per apprendere alcune differenze tra HashMap e Hashtable.


  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Somiglianze
  5. Conclusione

Tabella di comparazione

Base per il confrontoHashMaptabella hash
Implementare / estendereLa classe HashMap implementa l'interfaccia Map ed estende una classe AbstractMap.Hashtable estende la classe Dictionary Legacy, ma è stata riprogettata e ora implementa anche l'interfaccia Map.
SincronizzazioneHashMap non è sincronizzato e quindi l'oggetto HashMap non è sicuro.Hashtable è sincronizzato e quindi l'oggetto di Hashtable è thread-safe.
Chiavi / ValoreUna chiave può restituire Null solo una volta, ma un valore può restituire Null in qualsiasi numero di volte.Una chiave non può restituire Null poiché viene utilizzata per ottenere il codice hash che verrà utilizzato come indice della tabella hash, né un valore può restituire Null.
Capacità iniziale predefinitaLa capacità iniziale predefinita di HashMap è 16.La capacità iniziale predefinita di Hashtable è 11.
di movimentoHashMap è attraversato da Iterator.Come la classe Map Hashtable, inoltre, non supporta direttamente Iterator per l'attraversamento e quindi utilizza Enumerator.


Definizione di HashMap

HashMap è una classe che implementa il Carta geografica interfaccia ed estende il AbstractMap la classe usa la tabella hash. L'oggetto di HashMap si riferisce a una raccolta / set di coppia in cui ogni chiave è mappata su un valore particolare. Le chiavi in ​​una raccolta devono essere univoche in quanto vengono utilizzate per recuperare il valore. D'altra parte, i valori in una raccolta possono essere duplicati. La dichiarazione della classe HashMap e i costruttori della classe HashMap sono i seguenti:

/ * K rappresenta la chiave e V rappresenta il valore * / class HashMap / * Costruttori della classe HashMap * / HashMap () HashMap (Mappa <? Estende K,? Estende V> m) HashMap (capacità int) HashMap (capacità int, float fillRatio)

Il primo costruttore è un costruttore predefinito che inizializza un oggetto vuoto di HashMap con una capacità predefinita di 16 e un rapporto di riempimento predefinito di 0,75. Il secondo costruttore inizializza la mappa hash con il valore di m. Il terzo costruttore crea una mappa hash con la capacità iniziale corrispondente al valore fornito nell'argomento "capacità". Il quarto costruttore inizializza la mappa hash con una capacità e un rapporto di riempimento forniti nei parametri. impariamo ora come alimentare le voci in una mappa hash.

Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * output * / {Vijay = 250, Jonny = 150, Ajay = 275, Giordania = 200}

Nel codice sopra, puoi vedere che ho creato un oggetto HashMap vuoto hm con capacità iniziale predefinita e rapporto di riempimento predefinito. Quindi ho inserito quattro voci nella mappa hash usando il metodo put (K, V) che associa la chiave al valore. È possibile osservare che le voci non vengono modificate in una sequenza in cui vengono alimentate perché l'ordine di inserimento non è stato corretto. Ora, considera un caso in cui hai già una voce nella mappa hash e successivamente si tenta di inserire put (K1, V5), ovvero si tenta di mappare la stessa chiave con un valore diverso. Quindi il metodo put sostituirà il vecchio valore V1 con il nuovo valore V2 e restituirà il vecchio valore V1, altrimenti, se non proviamo mai a sostituire il valore di una chiave, il metodo put restituisce Null per quella chiave.

Definizione di Hashtable

Hashtable è una classe che estende il Dizionario classe che è una classe legacy ed è stata riprogettata per implementare il Carta geografica interfaccia. Hashtable utilizza la tabella hash come struttura dati. Hashtable è simile a HashMap poiché qui anche l'oggetto di Hashtable si riferisce alla raccolta di voci in cui ogni voce è una coppia di . D'altra parte, tutte le chiavi di una raccolta devono essere univoche, i valori possono essere duplicati. Le chiavi sono utilizzate in particolare per ottenere il valore del codice hash che decide l'indice, dove il la coppia verrà memorizzata in una tabella hash. In una tabella hash, né una chiave né un valore possono restituire il puntatore Null. Vediamo la dichiarazione della classe Hashtable e i costruttori della classe hashtable.

/ * K specifica la chiave e V specifica il valore associato alla chiave * / class Hashtable / * costruttori di Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Mappa <? estende K,? estende V> m)

Nel codice sopra, il primo costruttore è un costruttore predefinito che crea un oggetto vuoto di una classe Hashtable, la sua dimensione predefinita è 11 e il rapporto di riempimento predefinito è 0,75. Il secondo costruttore crea una tabella hash con la dimensione corrispondente al valore fornito nel parametro "dimensione". Il terzo costruttore crea una tabella hash con una dimensione e un rapporto di riempimento forniti nel parametro. Il quarto costruttore inizializza la tabella hash con il valore m. Impariamo ora come inserire il file coppia nella tabella hash.

Hashtable ht = new Hashtable (); ht.put (nuovo hashCode (2), 275); ht.put (nuovo hashCode (12), 250); ht.put (nuovo hashCode (16), 150); ht.put (nuovo hashCode (8), 200); System.out.ln (ht); / * output * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Nel codice sopra, ho creato un oggetto vuoto di Hashtable e ho inserito quattro voci usando il metodo put (). All'interno del metodo put ho chiamato hashCode () che calcola e restituisce il valore del codice hash che fungerà da valore dell'indice per l'oggetto entry. Come puoi vedere non ho menzionato la dimensione della tabella hash, quindi per impostazione predefinita sarà 11. Anche qui, l'ordine di inserzione non viene conservato e, quindi, quando le voci ed non vengono visualizzate in sequenza, viene alimentato.

  1. HashMap implementa Carta geografica interfaccia ed estende una classe astratta, AbstractMap mentre, Hashtable estende la classe astratta Dizionario, che è anche una classe Legacy, successivamente riprogettata per essere implementata Carta geografica interfaccia.
  2. L'oggetto HashMap è non sincronizzato vale a dire che più thread possono operare contemporaneamente su di esso e quindi oggetti non thread-safe. D'altra parte, gli oggetti di Hashtable sono sincronizzato cioè se un thread vuole operare su un oggetto di Hashtable deve acquisire un blocco su quell'oggetto in modo che nessun altro thread possa accedere a quell'oggetto e, quindi, è thread-safe.
  3. Nella chiave HashMap può tornare Null solo una voltae il valore può restituire Null più volte. D'altra parte, una chiave non può mai restituire Null poiché utilizzata per ottenere il valore del codice hash utilizzato come indice per archiviare coppia e nemmeno un valore può restituire Null.
  4. La capacità predefinita di una tabella hash nella classe HashMap è 16 mentre la capacità predefinita di una tabella hash in Hashtable è 11.
  5. Il Iterator può attraversare le voci di Hashmap. D'altra parte, Hashtable non supporta direttamente l'Iteratore e quindi, in generale enumeratore viene utilizzato per attraversare le voci in Hashtable.

Somiglianze:

  • HashMap e Hashtable utilizzano entrambi la struttura dati di tabella hash.
  • HashMap e Hashtable entrambi gli strumenti Carta geografica interfaccia
  • L'ordine di inserimento non viene conservato sia in HashMap che in Hashtable e basato sul codice hash ottenuto usando le chiavi.
  • In HashMap e Hashtable, le chiavi devono essere unico al contrario, i valori possono essere duplicato.
  • HashMap e Hashtable possono entrambi contenere oggetti eterogenei sia per le chiavi che per i valori.
  • HashMap e Hashtable, entrambi gli strumenti Serializable e clonabile interfacce ma no, accesso casuale.
  • HashMap e Hashtable hanno entrambi un rapporto di riempimento predefinito 0.75.
  • HashMap e Hashtable sono entrambi ideali per il recupero o ricerca operazioni.

Conclusione:

HashMap ha prestazioni migliori in quanto i suoi oggetti non sono sincronizzati e più thread possono operare su di esso contemporaneamente, quindi è più veloce di Hashtable.