Java HashMap i TreeMap obje su klase okvira Java Collections. Implementacija Java karte obično djeluje kao raspršena tablica raspršivanja. Kada kante postanu prevelike, pretvaraju se u čvorove Čvorovi stabla , svaki strukturiran slično onima u java.util.TreeMap .
HashMap
HashMap implementira Karta, mogućnost kloniranja i Serializable sučelje. Proteže se SažetakMap razreda. Pripada java.util paket.
- HashMap sadrži vrijednost temeljenu na ključu.
- Može imati jedan null ključ i više null vrijednosti.
- HashMap ne održava red tijekom ponavljanja.
- Sadrži jedinstvene elemente.
- Radi na principu raspršivanja.
TreeMap
TreeMap klasa se proširuje SažetakMap razreda i pribora NavigableMap , Može se klonirati , i Serializable sučelje. TreeMap je primjer a SortedMap . Implementiran je crveno-crnim stablom, što znači da je redoslijed tipki sortiran.
- TreeMap također sadrži vrijednost temeljenu na ključu.
- TreeMap je poredan po ključevima.
- Sadrži jedinstvene elemente.
- Ne može imati null ključ, ali ima više null vrijednosti.
- Ključevi su poredani uzlaznim redoslijedom.
- Pohranjuje objekt u strukturi stabla.
Sličnosti između HashMapa i TreeMapa
- Obje se klase proširuju SažetakMap razreda.
- Mapa je objekt koji pohranjuje ključ-vrijednost parovi. U paru ključ-vrijednost svaki ključ je jedinstven, ali njihove vrijednosti mogu biti jedinstvene duplikat .
- Obje klase predstavljaju preslikavanje iz ključ do vrijednosti .
- Obje karte nisu sinkronizirano .
- Korištenje karte staviti() metoda za dodavanje elementa na kartu.
- Iterator baca a ConcurrentModificationException ako se karta na bilo koji način izmijeni.
Ključna razlika između HashMapa i TreeMapa je:
HashMap ne čuva redoslijed ponavljanja dok TreeMap očuvati red korištenjem usporedi s() metoda ili a komparator postaviti u konstruktoru TreeMapa.
Sljedeća tablica opisuje razlike između HashMapa i TreeMapa.
Osnova | HashMap | TreeMap |
---|---|---|
Definicija | Java HashMap je implementacija sučelja karte temeljena na tablici raspršivanja. | Java TreeMap je implementacija sučelja karte temeljena na strukturi stabla. |
Implementi sučelja | HashMap implementira Karta, mogućnost kloniranja , i Serializable sučelje. | TreeMap implementira Navigabilna karta, klonirana , i Serializable sučelje. |
Null ključevi/vrijednosti | HashMap omogućuje a singl nulti ključ i višestruki nulte vrijednosti. | TreeMap ne dopušta ništavan ključeve ali može imati višestruki nulte vrijednosti. |
Homogeno/heterogeno | HashMap dopušta heterogene elemente jer ne vrši sortiranje po ključevima. | TreeMap dopušta homogene vrijednosti kao ključ zbog sortiranja. |
Izvođenje | HashMap je brže nego TreeMap jer pruža izvedbu u konstantnom vremenu koja je O(1) za osnovne operacije kao što su get() i put(). | TreeMap je usporiti u usporedbi s HashMapom jer pruža performanse O(log(n)) za većinu operacija kao što su add(), remove() i contains(). |
Struktura podataka | Klasa HashMap koristi hash tablica . | TreeMap interno koristi a Crveno-crno stablo, koje je samo-balansirajuće binarno stablo pretraživanja. |
Metoda usporedbe | Koristi se jednako() metoda Objekt klasa za usporedbu ključeva. Metoda equals() klase Map je nadjačava. | Koristi se usporedi s() metoda za usporedbu ključeva. |
Funkcionalnost | Klasa HashMap sadrži samo osnovne funkcije kao što su get(), put(), KeySet() , itd. | Klasa TreeMap je bogata funkcionalnošću jer sadrži funkcije kao što su: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Redoslijed elemenata | HashMap ne održava nikakav red. | Elementi su poredani prirodni poredak (uzlazni). |
Koristi | HashMap treba koristiti kada ne trebamo par ključ-vrijednost u sortiranom redoslijedu. | TreeMap treba koristiti kada trebamo par ključ-vrijednost u sortiranom (uzlaznom) redoslijedu. |
Primjer HashMap vs TreeMap
U sljedećem primjeru možemo uočiti da su elementi HashMapa raspoređeni nasumičnim redoslijedom, dok su elementi TreeMapa raspoređeni uzlaznim redoslijedom.
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()); } } }
Izlaz: