Java HashMap a Stromová mapa obe sú triedami rámca Java Collections. Implementácia Java Map zvyčajne funguje ako bucketovaná hašovacia tabuľka. Keď sú vedrá príliš veľké, premenia sa na uzly TreeNodes , každý je štruktúrovaný podobne ako v java.util.TreeMap .
HashMap
implementuje HashMap Mapa, klonovateľná a Serializovateľné rozhranie. Rozširuje sa Abstraktná mapa trieda. Patrí k java.util balík.
- HashMap obsahuje hodnotu založenú na kľúči.
- Môže mať jeden kľúč null a viacero hodnôt null.
- HashMap neudržiava poriadok počas iterácie.
- Obsahuje jedinečné prvky.
- Funguje na princípe hashovania.
Stromová mapa
Trieda TreeMap sa rozširuje Abstraktná mapa triedy a náradia Navigovateľná mapa , Klonovateľné a Serializovateľné rozhranie. TreeMap je príkladom a SortedMap . Je implementovaný stromom Red-Black, čo znamená, že poradie kľúčov je zoradené.
- TreeMap tiež obsahuje hodnotu založenú na kľúči.
- TreeMap je zoradený podľa kľúčov.
- Obsahuje jedinečné prvky.
- Nemôže mať nulový kľúč, ale môže mať viacero nulových hodnôt.
- Kľúče sú vo vzostupnom poradí.
- Ukladá objekt do stromovej štruktúry.
Podobnosti medzi HashMap a TreeMap
- Obe triedy sa rozširujú Abstraktná mapa trieda.
- Mapa je objekt, ktorý ukladá kľúč-hodnota párov. V páre kľúč – hodnota je každý kľúč jedinečný, ale ich hodnoty môžu byť duplikát .
- Obe triedy predstavujú mapovanie z kľúč do hodnoty .
- Obe mapy nie sú synchronizované .
- Použitie mapy dať () metóda na pridanie prvku do mapy.
- Iterátor vyhodí a ConcurrentModificationException ak sa mapa akýmkoľvek spôsobom upraví.
Kľúčový rozdiel medzi HashMap a TreeMap je:
HashMap nezachováva poradie iterácií, zatiaľ čo Stromová mapa zachovať objednávku pomocou porovnať s() metóda alebo a komparátor nastaviť v konštruktore TreeMap.
Nasledujúca tabuľka popisuje rozdiely medzi HashMap a TreeMap.
Základ | HashMap | Stromová mapa |
---|---|---|
Definícia | Java HashMap je implementácia rozhrania mapy založená na hashtable. | Java Stromová mapa je implementácia rozhrania mapy založená na stromovej štruktúre. |
Implementy rozhrania | implementuje HashMap Mapa, klonovateľná a Serializovateľné rozhranie. | Implementy TreeMap Navigovateľná mapa, klonovateľná a Serializovateľné rozhranie. |
Nulové kľúče/hodnoty | HashMap umožňuje a slobodný nulový kľúč a viacnásobné nulové hodnoty. | TreeMap to neumožňuje nulový kľúče, ale môže mať viacnásobné nulové hodnoty. |
Homogénne/ heterogénne | HashMap umožňuje heterogénne prvky, pretože nevykonáva triedenie kľúčov. | TreeMap umožňuje homogénne hodnoty ako kľúč z dôvodu triedenia. |
Výkon | HashMap je rýchlejšie ako TreeMap, pretože poskytuje výkon v konštantnom čase, ktorý je O(1) pre základné operácie ako get() a put(). | TreeMap je pomaly v porovnaní s HashMap, pretože poskytuje výkon O(log(n)) pre väčšinu operácií ako add(), remove() a include(). |
Dátová štruktúra | Trieda HashMap používa hash tabuľka . | TreeMap interne používa a Červená čierna strom, čo je samovyvažujúci binárny vyhľadávací strom. |
Porovnávacia metóda | Používa sa rovná sa() metóda Objekt triedy na porovnanie kľúčov. Metóda equals() triedy Map ju prepíše. | Používa sa porovnať s() metóda porovnávania kľúčov. |
Funkčnosť | Trieda HashMap obsahuje iba základné funkcie ako get(), put(), KeySet() , atď. . | Trieda TreeMap je bohatá na funkcie, pretože obsahuje funkcie ako: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Poradie prvkov | HashMap neudržiava žiadny poriadok. | Prvky sú zoradené v prirodzený poriadok (vzostupne). |
Využitie | HashMap by sa mal použiť, keď nevyžadujeme pár kľúč – hodnota v zoradenom poradí. | Stromová mapa by sa mala použiť, keď požadujeme pár kľúč – hodnota v zoradenom (vzostupnom) poradí. |
Príklad HashMap vs TreeMap
V nasledujúcom príklade môžeme pozorovať, že prvky HashMap sú v náhodnom poradí, zatiaľ čo prvky TreeMap sú usporiadané vo vzostupnom poradí.
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()); } } }
Výkon: