Jáva HashMap a Stromová mapa obě jsou třídy frameworku Java Collections. Implementace Java Map obvykle funguje jako bucketovaná hashovací tabulka. Když jsou kbelíky příliš velké, přeměňují se na uzly TreeNodes , každý strukturovaný podobně jako v java.util.TreeMap .
HashMap
implementuje HashMap Mapa, klonovatelná a Serializovatelné rozhraní. Prodlužuje se Abstraktní mapa třída. Patří k java.util balík.
- HashMap obsahuje hodnotu založenou na klíči.
- Může mít jeden klíč null a více hodnot null.
- HashMap neudržuje pořádek při iteraci.
- Obsahuje unikátní prvky.
- Funguje na principu hashování.
Stromová mapa
Třída TreeMap se rozšiřuje Abstraktní mapa třídy a nářadí Navigovatelná mapa , Klonovatelné , a Serializovatelné rozhraní. TreeMap je příkladem a Seřazená mapa . Je implementován stromem Red-Black, což znamená, že pořadí klíčů je seřazeny.
ukázkové programy java
- TreeMap také obsahuje hodnotu založenou na klíči.
- TreeMap je řazena podle klíčů.
- Obsahuje unikátní prvky.
- Nemůže mít klíč null, ale mít více hodnot null.
- Klíče jsou ve vzestupném pořadí.
- Ukládá objekt do stromové struktury.
Podobnosti mezi HashMap a TreeMap
- Obě třídy se rozšiřují Abstraktní mapa třída.
- Mapa je objekt, který ukládá klíč-hodnota páry. V páru klíč–hodnota je každý klíč jedinečný, ale jejich hodnoty mohou být jedinečné duplikát .
- Obě třídy představují mapování z klíč na hodnoty .
- Obě mapy nejsou synchronizované .
- Použití mapy dát() způsob přidání prvku do mapy.
- Iterátor vyvolá a ConcurrentModificationException pokud se mapa nějakým způsobem upraví.
Klíčový rozdíl mezi HashMap a TreeMap je:
HashMap nezachovává pořadí iterací, zatímco Stromová mapa zachovat objednávku pomocí porovnat s() metoda nebo a srovnávač nastavit v konstruktoru TreeMap.
Následující tabulka popisuje rozdíly mezi HashMap a TreeMap.
Základ | HashMap | Stromová mapa |
---|---|---|
Definice | Jáva HashMap je implementace rozhraní Map založená na hashtable. | Jáva Stromová mapa je implementace mapového rozhraní založená na stromové struktuře. |
Implementy rozhraní | implementuje HashMap Mapa, klonovatelná , a Serializovatelné rozhraní. | Implementy TreeMap Navigovatelná mapa, klonovatelná , a Serializovatelné rozhraní. |
Nulové klíče/hodnoty | HashMap umožňuje a singl nulový klíč a násobek nulové hodnoty. | TreeMap to neumožňuje nula klíče, ale může mít násobek nulové hodnoty. |
Homogenní/ heterogenní | HashMap umožňuje heterogenní prvky, protože neprovádí třídění klíčů. | TreeMap umožňuje jako klíč homogenní hodnoty kvůli řazení. |
Výkon | HashMap je rychlejší než TreeMap, protože poskytuje výkon v konstantním čase, který je O(1) pro základní operace jako get() a put(). | TreeMap je pomalý ve srovnání s HashMap, protože poskytuje výkon O(log(n)) pro většinu operací, jako je add(), remove() a obsahuje(). |
Datová struktura | Třída HashMap používá hashovací tabulka . | TreeMap interně používá a Červená černá strom, což je samovyvažující binární vyhledávací strom. |
Srovnávací metoda | Používá rovná se() metoda Objekt třídy pro porovnání klíčů. Metoda equals() třídy Map ji přepíše. | Používá se porovnat s() způsob porovnání klíčů. |
Funkčnost | Třída HashMap obsahuje pouze základní funkce jako get(), put(), KeySet() , atd. . | Třída TreeMap je bohatá na funkce, protože obsahuje funkce jako: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Pořadí prvků | HashMap neudržuje žádný pořádek. | Prvky jsou seřazeny v přirozený řád (vzestupně). |
Použití | HashMap by se měl používat, když nevyžadujeme pár klíč–hodnota v seřazeném pořadí. | Stromová mapa by se měla používat, když požadujeme pár klíč–hodnota v seřazeném (vzestupném) pořadí. |
Příklad HashMap vs TreeMap
V následujícím příkladu můžeme pozorovat, že prvky HashMap jsou v náhodném pořadí, zatímco prvky TreeMap jsou uspořádány vzestupně.
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ýstup: