Java HashMap și Harta copacului ambele sunt clase ale cadrului Java Collections. Implementarea Java Map acționează de obicei ca o tabelă hash cu compartimente. Când gălețile devin prea mari, ele se transformă în noduri de TreeNodes , fiecare structurat similar celor din java.util.TreeMap .
HashMap
Implementări HashMap Hartă, clonabilă și Serializabil interfață. Se extinde AbstractHarta clasă. Apartine java.util pachet.
- HashMap conține o valoare bazată pe cheie.
- Poate avea o singură cheie nulă și mai multe valori nule.
- HashMap nu menține ordinea în timpul iterării.
- Conține elemente unice.
- Funcționează pe principiul hashingului.
Harta copacului
Clasa TreeMap se extinde AbstractHarta clasa si instrumentele Navigabil Map , Clonabil , și Serializabil interfață. TreeMap este un exemplu de a SortedMap . Este implementat de arborele Roșu-Negru, ceea ce înseamnă că ordinea cheilor este sortată.
- TreeMap conține și o valoare bazată pe cheie.
- TreeMap este sortată după chei.
- Conține elemente unice.
- Nu poate avea o cheie nulă, dar are mai multe valori nule.
- Cheile sunt în ordine crescătoare.
- Stochează obiectul în structura arborescentă.
Asemănări între HashMap și TreeMap
- Ambele clase se extind AbstractHarta clasă.
- O hartă este un obiect care stochează valoare cheie perechi. În perechea cheie-valoare, fiecare cheie este unică, dar valorile lor pot fi duplicat .
- Ambele clase reprezintă maparea de la cheie la valorile .
- Ambele hărți nu sunt sincronizate .
- Utilizarea hărții a pune() metoda de a adăuga un element în hartă.
- Iteratorul aruncă a ConcurrentModificationException dacă harta se modifică în vreun fel.
Diferența cheie dintre HashMap și TreeMap este:
HashMap nu păstrează ordinea de iterație în timp ce Harta copacului păstrați ordinea utilizând compara cu() metoda sau a comparator stabilit în constructorul TreeMap.
Următorul tabel descrie diferențele dintre HashMap și TreeMap.
Bază | HashMap | Harta copacului |
---|---|---|
Definiție | Java HashMap este o implementare bazată pe hashtable a interfeței Map. | Java Harta copacului este o implementare bazată pe structura arborelui a interfeței Map. |
Implementări de interfață | Implementări HashMap Hartă, clonabilă , și Serializabil interfață. | Implementări TreeMap NavigableMap, clonabil , și Serializabil interfață. |
Chei/Valori nule | HashMap permite a singur cheie nulă și multiplu valori nule. | TreeMap nu permite nul chei dar poate avea multiplu valori nule. |
Omogen/Eterogen | HashMap permite elemente eterogene deoarece nu realizează sortarea pe chei. | TreeMap permite valori omogene ca cheie din cauza sortării. |
Performanţă | HashMap este Mai repede decât TreeMap, deoarece oferă performanță în timp constant care este O(1) pentru operațiunile de bază precum get() și put(). | TreeMap este încet în comparație cu HashMap, deoarece oferă performanța lui O(log(n)) pentru majoritatea operațiunilor precum add(), remove() și contains(). |
Structură de date | Clasa HashMap folosește masa hash . | TreeMap utilizează intern a Roșu-Negru arbore, care este un arbore de căutare binar cu auto-echilibrare. |
Metoda de comparare | Folosește este egal() metoda de Obiect clasă pentru a compara cheile. Metoda equals() a clasei Map o înlocuiește. | Acesta folosește compara cu() metoda de comparare a cheilor. |
Funcționalitate | Clasa HashMap conține doar funcții de bază, cum ar fi get(), put(), KeySet() , etc. | Clasa TreeMap este bogată în funcționalități, deoarece conține funcții precum: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Ordinea elementelor | HashMap nu menține nicio ordine. | Elementele sunt sortate în ordinea naturală (ascendent). |
Utilizări | HashMap ar trebui să fie folosit atunci când nu avem nevoie de pereche cheie-valoare în ordine sortată. | TreeMap ar trebui folosit atunci când avem nevoie de pereche cheie-valoare în ordine sortată (crescător). |
Exemplu de HashMap vs TreeMap
În exemplul următor, putem observa că elementele HashMap sunt în ordine aleatorie, în timp ce elementele TreeMap sunt aranjate în ordine crescătoare.
import java.util.Map; import java.util.HashMap; import java.util.TreeMap; public class HashMapVsTreeMapExample { public static void main(String args[]) { /*------------HashMap implementation----------------*/ Map hm=new HashMap(); //adding elements to the HashMap hm.put(9, 'Red'); hm.put(12, 'Black'); hm.put(6, 'Green'); hm.put(19, 'White'); System.out.println('HashMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: hm.entrySet()) { //getting keys and values using method System.out.println(entry.getKey() + ' = ' +entry.getValue()); } /*------------TreeMap implementation----------------*/ Map tm=new TreeMap(); //adding elements to the TreeMap tm.put(9, 'Red'); tm.put(12, 'Black'); tm.put(6, 'Green'); tm.put(19, 'White'); System.out.println('TreeMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: tm.entrySet()) { //getting keys and values using method //prints list in sorted order System.out.println(entry.getKey() + ' = ' +entry.getValue()); } } }
Ieșire: