example - new map java




Differenza tra HashMap, LinkedHashMap e TreeMap (10)

HashMap non garantisce assolutamente l'ordine di iterazione. Può (e lo farà) persino cambiare completamente quando vengono aggiunti nuovi elementi. TreeMap verrà iterato secondo "l'ordine naturale" delle chiavi in ​​base al loro metodo compareTo () (o un comparatore fornito esternamente). Inoltre, implementa l'interfaccia SortedMap, che contiene metodi che dipendono da questo ordinamento. LinkedHashMap itererà nell'ordine in cui le voci sono state inserite nella mappa

Guarda come le prestazioni variano ..

Mappa ad albero che è un'implementazione della mappa ordinata. La complessità dell'operazione put, get e contieneKey è O (log n) dovuta all'ordinamento Natural

Qual è la differenza tra HashMap , LinkedHashMap e TreeMap in Java? Non vedo alcuna differenza nell'output in quanto tutti e tre hanno keySet e values . Cosa sono gli Hashtable ?

Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet()); 
print(m1.values()); 

SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet()); 
print(sm.values());

LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet()); 
print(lm.values());

HashMap

  • Ha valori di coppia (chiavi, valori)
  • NESSUN valore della chiave di duplicazione
  • non ordinato non ordinato
  • consente una chiave nulla e più valori nulli

HashTable

  • come la mappa hash
  • non consente chiavi nulle e valori nulli

LinkedHashMap

  • È ordinata versione dell'implementazione della mappa
  • Basato su liste di dati e strutture di dati hashing

TreeMap

  • Versione ordinata e filtrata
  • basato su strutture di dati hashing

Di seguito sono riportate le principali differenze tra HashMap e TreeMap

  1. HashMap non mantiene alcun ordine. In altre parole, HashMap non fornisce alcuna garanzia che l'elemento inserito per primo verrà stampato per primo, dove, proprio come TreeSet, anche gli elementi TreeMap sono ordinati secondo l'ordine naturale dei suoi elementi

  2. L'implementazione interna di HashMap utilizza Hashing e TreeMap utilizza internamente l'implementazione dell'albero Red-Black.

  3. HashMap può memorizzare una chiave nulla e molti valori nulli.TreeMap non può contenere chiavi null ma può contenere molti valori nulli.

  4. HashMap richiede prestazioni a tempo costante per le operazioni di base come get e put ie O (1). Secondo i documenti Oracle, TreeMap fornisce il costo log (n) garantito per il metodo get e put.

  5. HashMap è molto più veloce di TreeMap, poiché il tempo di esecuzione di HashMap è costante rispetto al tempo di registrazione TreeMap per la maggior parte delle operazioni.

  6. HashMap usa il metodo equals () in confronto mentre TreeMap usa il metodo compareTo () per mantenere l'ordinamento.

  7. HashMap implementa l'interfaccia Mappa mentre TreeMap implementa l'interfaccia NavigableMap.


La mappa hash non conserva l'ordine di inserimento.
Esempio. Hashmap Se stai inserendo chiavi come

1  3
5  9
4   6
7   15
3   10

Può memorizzarlo come

4  6
5  9
3  10
1  3
7  15

Hashmap collegato conserva l'ordine di inserimento.

Esempio.
Se stai inserendo le chiavi

1  3
5  9
4   6
7   15
3   10

Lo memorizzerà come

1  3
5  9
4   6
7   15
3   10

lo stesso che inseriamo.

La mappa ad albero memorizza i valori in Aumentare ordine di chiavi. Esempio.
Se stai inserendo le chiavi

1  3
5  9
4   6
7   15
3   10

Lo memorizzerà come

1  3
3  10
4   6
5   9
7   15

Queste sono diverse implementazioni della stessa interfaccia. Ogni implementazione presenta alcuni vantaggi e alcuni svantaggi (inserimento rapido, ricerca lenta) o viceversa.

Per i dettagli guarda il javadoc di TreeMap , HashMap , LinkedHashMap .


Solo un po 'di input dalla mia esperienza con le mappe, su quando avrei usato ognuna:

  • HashMap - La maggior parte utile quando si cerca un'implementazione (veloce) best-performance.
  • TreeMap (interfaccia SortedMap) - Molto utile quando mi preoccupo di essere in grado di ordinare o iterare sulle chiavi in ​​un particolare ordine che definisco.
  • LinkedHashMap: combina i vantaggi di un ordine garantito da TreeMap senza il costo maggiore della manutenzione della TreeMap. (È quasi veloce come la HashMap). In particolare, LinkedHashMap fornisce anche un ottimo punto di partenza per la creazione di un oggetto Cache sovrascrivendo il metodo removeEldestEntry() . Ciò consente di creare un oggetto Cache che può scadere i dati utilizzando alcuni criteri definiti dall'utente.

Tutte e tre le classi implementano l'interfaccia Map e offrono principalmente la stessa funzionalità. La differenza più importante è l'ordine in cui avverrà l'iterazione attraverso le voci:

  • HashMap non garantisce assolutamente l'ordine di iterazione. Può (e lo farà) persino cambiare completamente quando vengono aggiunti nuovi elementi.
  • TreeMap verrà iterato secondo "l'ordine naturale" delle chiavi in ​​base al loro metodo compareTo() (o un Comparator fornito esternamente). Inoltre, implementa l'interfaccia SortedMap , che contiene metodi che dipendono da questo ordinamento.
  • LinkedHashMap nell'ordine in cui le voci sono state inserite nella mappa

"Hashtable" è il nome generico per le mappe basate su hash. Nel contesto dell'API Java, Hashtable è una classe obsoleta dai tempi di Java 1.1 prima che esistesse il framework delle collezioni. Non dovrebbe più essere usato, perché la sua API è ingombra di metodi obsoleti che duplicano funzionalità e i suoi metodi sono sincronizzati (il che può ridurre le prestazioni ed è generalmente inutile). Usa ConcurrentHashMap invece di Hashtable.


Tutti e tre rappresentano la mappatura da chiavi univoche a valori e quindi implementano l'interfaccia Map .

  1. HashMap è una mappa basata sull'hashing delle chiavi. Supporta operazioni O (1) get / put. Le chiavi devono avere implementazioni coerenti di hashCode() ed equals() affinché funzioni.

  2. LinkedHashMap è molto simile a HashMap, ma aggiunge consapevolezza all'ordine in cui gli oggetti vengono aggiunti (o consultati), quindi l'ordine di iterazione è lo stesso dell'ordine di inserimento (o ordine di accesso, a seconda dei parametri di costruzione).

  3. TreeMap è una mappatura ad albero. Le sue operazioni put / get richiedono O (log n) time. Richiede elementi per avere qualche meccanismo di comparazione, sia con Comparable che con Comparator. L'ordine di iterazione è determinato da questo meccanismo.


Vedi dove ogni classe si trova nella gerarchia di classi nel seguente diagramma ( quello più grande ). SortedMap implementa SortedMap e HashMap mentre HashMap no.

HashTable è obsoleto e dovrebbe essere utilizzata la corrispondente classe ConcurrentHashMap .


HashMap
può contenere una chiave nulla.

HashMap non mantiene alcun ordine.

TreeMap

TreeMap non può contenere alcuna chiave nulla.

TreeMap mantiene l'ordine crescente.

LinkedHashMap

LinkedHashMap può essere utilizzato per mantenere l'ordine di inserimento, su quali chiavi sono inserite in Map o può anche essere usato per mantenere un ordine di accesso, su cui si accede ai tasti.

Esempi ::

1) HashMap map = new HashMap ();

    map.put(null, "Kamran");
    map.put(2, "Ali");
    map.put(5, "From");
    map.put(4, "Dir");`enter code here`
    map.put(3, "Lower");
    for (Map.Entry m : map.entrySet()) {
        System.out.println(m.getKey() + "  " + m.getValue());
    } 

2) TreeMap map = new TreeMap ();

    map.put(1, "Kamran");
    map.put(2, "Ali");
    map.put(5, "From");
    map.put(4, "Dir");
    map.put(3, "Lower");
    for (Map.Entry m : map.entrySet()) {
        System.out.println(m.getKey() + "  " + m.getValue());
    }

3) LinkedHashMap map = new LinkedHashMap ();

    map.put(1, "Kamran");
    map.put(2, "Ali");
    map.put(5, "From");
    map.put(4, "Dir");
    map.put(3, "Lower");
    for (Map.Entry m : map.entrySet()) {
        System.out.println(m.getKey() + "  " + m.getValue());
    }






map