Differenza tra HashMap e LinkedHashMap

HashMap e LinkedHashMap sono due delle implementazioni di mappe più comuni e generiche nella piattaforma Java. Sono fondamentalmente classi basate su hash, abbastanza simili tra loro e utilizzate per creare una mappa. L'interfaccia Map è l'ultima delle principali interfacce Collections Framework che definisce le operazioni supportate da un insieme di associazioni key-to-value in cui le chiavi sono univoche. Queste implementazioni di mappe sono basate su un algoritmo di hashing. Mentre la classe HashMap implementa mappe non ordinate, la classe LinkedHashMap implementa le mappe ordinate. L'implementazione LinkedHashMap è una sottoclasse della classe HashMap che significa che eredita le funzionalità della classe HashMap. Non c'è molta differenza tra i due in termini di prestazioni. Diamo un'occhiata.

Cos'è HashMap? 

HashMap è una delle più comuni e tra le quattro implementazioni generali dell'interfaccia Map in Java basata su un algoritmo di hashing. È analogo alla classe impostata HashSet, anche se gli elementi non sono ordinati in entrambe le classi. È implementato come tabella hash ma, diversamente da LinkedHashMap, non mantiene alcun ordine su chiavi o valori. In generale, HashMap offre prestazioni costanti per put e get. La classe non è thread-safe ma consente una chiave nulla e più valori null. Poiché non mantiene un ordine di iterazione, richiede meno memoria.

Cos'è LinkedHashMap?

LinkedHashMap è tra le quattro implementazioni generali dell'interfaccia Map, che è una sottoclasse della classe HashMap, il che significa che eredita le sue funzionalità. Sebbene sia molto simile a HashMap in termini di prestazioni, ad eccezione del fatto che mantiene l'ordine di inserimento delle chiavi, sia nell'ordine in cui le chiavi sono inserite nella mappa sia nell'ordine in cui le voci sono accessibili nella mappa. Affina il contratto della sua classe genitore garantendo l'ordine in cui gli iteratori restituiscono i suoi elementi. Tuttavia, richiede più memoria di una HashMap perché mantiene una lista doppiamente collegata in Java.

Differenza tra HashMap e LinkedHashMap

  1. Nozioni di base su HashMap vs. LinkedHashMap

HashMap è un'implementazione basata su hash dell'interfaccia Map in Java. Le mappe sono una raccolta di coppie chiave-valore e vengono utilizzate quando le liste sono nella raccolta ordinata. HashMap è una classe Collection che memorizza il valore nelle coppie chiave-valore. In termini semplici, associa le chiavi ai valori, il che significa che può individuare un valore basato su una chiave. LinkedHashMap è un'implementazione di lista collegata dell'interfaccia Mappa proprio come HashMap, tranne che mantiene gli ordini di elementi inseriti in esso. È una sottoclasse di HashMap che eredita le sue funzionalità. LinkedHashMap perfeziona il contratto della sua classe genitore, HashMap, garantendo l'ordine in cui gli iteratori restituiscono i suoi elementi.

  1. Ordine di iterazione

La differenza chiave tra HashMap e LinkedHashMap è l'ordine. Gli elementi di una HashMap non sono in ordine, totalmente casuali, mentre gli elementi di LinkedHashMap sono ordinati. Le voci di una LinkedHashMap sono nell'ordine di inserimento delle chiavi, che è l'ordine in cui le chiavi sono inserite nella mappa. Ciò significa che la prima chiave inserita nella mappa viene prima enumerata, così come il valore associato ad essa e l'ultima voce inserita nell'ultima numerata. LinkedHashMap ha un ordine di iterazione prevedibile che significa che può anche mantenere i suoi elementi nell'ordine di accesso, che è l'ordine in cui si accede alle voci.

  1. Implementazione

Entrambe le classi HashMap e LinkedHashMap utilizzano l'hashing per implementare l'interfaccia Mappa in Java, eccetto che HashMap è implementato come una tabella hash mentre LinkedHashMap mantiene un elenco doppiamente collegato di bucket che attraversano tutte le sue voci. Questo è il motivo per cui LinkedHashMap richiede più memoria di HashMap perché a differenza di HashMap, mantiene un ordine. Rimuove l'ordine caotico di HashMap, senza incorrere nel costo aggiuntivo che altrimenti sarebbe stato sostenuto con TreeMap. Oltre a ciò, la classe LinkedHashMap è molto simile alla classe HashMap in molti aspetti come la sincronizzazione e le chiavi / valori null in quanto entrambi consentono una chiave nulla e valori null multipli.

  1. Prestazioni per HashMap vs. LinkedHashMap

Sebbene entrambe le classi forniscano prestazioni comparabili, la classe HashMap è ritenuta la scelta preferita se l'ordine non è un problema perché non garantisce l'ordine iterativo della mappa. Operazioni come l'aggiunta, la rimozione o la ricerca di voci basate su una chiave sono tempi costanti, poiché cancellano la chiave. Quindi aggiungere, rimuovere e trovare le voci in una LinkedHashMap può essere leggermente più lento che in una HashMap perché mantiene un elenco di bucket in doppia connessione in Java. Inoltre, HashMap richiede meno memoria di LinkedHashMap perché non viene mantenuto alcun ordine.

HashMap vs. LinkedHashMap: grafico di confronto

Riepilogo di HashMap vs. LinkedHashMap

Mentre entrambe le classi di HashMap e HashMap sono quasi simili nelle prestazioni, HashMap richiede meno memoria di una LinkedHashMap perché non garantisce l'ordine iterativo della mappa, il che rende l'aggiunta, la rimozione e la ricerca di voci in una HashMap relativamente più veloce di fare lo stesso con una LinkedHashMap. Tuttavia, la differenza chiave tra i due è l'ordine: gli elementi di una HashMap non sono in ordine, mentre gli elementi di una LinkedHashMap sono nell'ordine di inserimento chiave per impostazione predefinita, ovvero l'ordine in cui le chiavi vengono inserite nella mappa. LinkedHashMap può anche mantenere i suoi elementi nell'ordine di accesso che indica l'ordine in cui si accede alle voci. Come con LinkedHashMap, è necessario mantenere una lista doppiamente collegata, con meno prestazioni di HashMap.