Java HashMap in TreeMap oba sta razreda ogrodja zbirk Java. Implementacija Java Map običajno deluje kot razpršena zgoščena tabela. Ko vedra postanejo prevelika, se spremenijo v vozlišča TreeNodes , vsaka je strukturirana podobno kot v java.util.TreeMap .
HashMap
HashMap izvaja Zemljevid, možnost kloniranja in Serializable vmesnik. Razširja se AbstractMap razred. Pripada java.util paket.
- HashMap vsebuje vrednost na podlagi ključa.
- Lahko ima en sam ničelni ključ in več ničelnih vrednosti.
- HashMap med ponavljanjem ne ohranja reda.
- Vsebuje edinstvene elemente.
- Deluje na principu zgoščevanja.
TreeMap
Razred TreeMap se razširi AbstractMap razreda in pripomočkov NavigableMap , Klonirati , in Serializable vmesnik. TreeMap je primer a SortedMap . Izvaja se z drevesom Rdeče-črno, kar pomeni, da je vrstni red tipk razvrščen.
- TreeMap vsebuje tudi vrednost na podlagi ključa.
- TreeMap je razvrščen po ključih.
- Vsebuje edinstvene elemente.
- Ne more imeti ničelnega ključa, vendar ima več ničelnih vrednosti.
- Ključi so v naraščajočem vrstnem redu.
- Objekt shrani v drevesno strukturo.
Podobnosti med HashMap in TreeMap
- Oba razreda se razširita AbstractMap razred.
- Zemljevid je objekt, ki shranjuje ključ-vrednost parov. V paru ključ-vrednost je vsak ključ edinstven, njihove vrednosti pa so lahko edinstvene dvojnik .
- Oba razreda predstavljata preslikavo iz ključ do vrednote .
- Oba zemljevida nista sinhronizirano .
- Uporaba zemljevida daj() način dodajanja elementa na zemljevid.
- Iterator vrže a ConcurrentModificationException če se zemljevid kakor koli spremeni.
Ključna razlika med HashMap in TreeMap je:
HashMap ne ohrani vrstnega reda ponovitev, medtem ko TreeMap ohranjanje reda z uporabo primerjaj z () metoda ali a primerjalnik nastavite v konstruktorju TreeMap.
Naslednja tabela opisuje razlike med HashMap in TreeMap.
Osnova | HashMap | TreeMap |
---|---|---|
Opredelitev | Java HashMap je izvedba vmesnika Map, ki temelji na zgoščeni tabeli. | Java TreeMap je implementacija vmesnika Zemljevid na osnovi drevesne strukture. |
Vmesniški elementi | HashMap izvaja Zemljevid, možnost kloniranja , in Serializable vmesnik. | TreeMap izvaja NavigableMap, Cloneable , in Serializable vmesnik. |
Ničelni ključi/vrednosti | HashMap omogoča a samski ničelni ključ in večkraten ničelne vrednosti. | TreeMap ne dovoljuje nič ključe pa lahko večkraten ničelne vrednosti. |
Homogeno/heterogeno | HashMap omogoča heterogene elemente, ker ne izvaja razvrščanja po ključih. | TreeMap omogoča homogene vrednosti kot ključ zaradi razvrščanja. |
Izvedba | HashMap je hitreje kot TreeMap, ker zagotavlja zmogljivost v konstantnem času, ki je O(1) za osnovne operacije, kot sta get() in put(). | TreeMap je počasi v primerjavi s HashMap, ker zagotavlja zmogljivost O(log(n)) za večino operacij, kot so add(), remove() in contains(). |
Struktura podatkov | Razred HashMap uporablja zgoščena tabela . | TreeMap interno uporablja a Rdeče-črna drevo, ki je samouravnotežno binarno iskalno drevo. |
Metoda primerjave | Uporablja se enako () metoda Objekt razred za primerjavo ključev. Metoda equals() razreda Map jo preglasi. | Uporablja primerjaj z () način za primerjavo ključev. |
Funkcionalnost | Razred HashMap vsebuje samo osnovne funkcije, kot je get(), put(), KeySet() , itd. | Razred TreeMap je bogat s funkcionalnostjo, saj vsebuje funkcije, kot so: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Vrstni red elementov | HashMap ne vzdržuje nobenega reda. | Elementi so razvrščeni v naravni red (naraščajoče). |
Uporabe | HashMap je treba uporabiti, kadar ne potrebujemo para ključ-vrednost v razvrščenem vrstnem redu. | TreeMap je treba uporabiti, ko potrebujemo par ključ-vrednost v razvrščenem (naraščajočem) vrstnem redu. |
Primer HashMap proti TreeMap
V naslednjem primeru lahko opazimo, da so elementi HashMap v naključnem vrstnem redu, medtem ko so elementi TreeMap urejeni v naraščajočem vrstnem redu.
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()); } } }
Izhod: