Rámec Java Collection poskytuje sadu tříd kolekce. Každá třída má své silné a slabé stránky. Některé třídy poskytují úplné implementace, které lze použít tak, jak jsou. Jiné jsou abstraktní, které poskytují kostní implementace, které se používají jako výchozí body pro vytváření kolekcí. Implementace kolekce používají rámec synchronizovaných obalů k poskytování synchronizovaných tříd, jinak jsou implementace nesynchronizované. Několik tříd poskytuje implementace rozhraní mapy.
Platforma Java obsahuje tři implementace Map pro obecné použití: HashMap, TreeMap a LinkedHashMap. HashMap a Hashtable jsou dvě kolekce v Javě používané k ukládání párů klíčů a hodnot v hašovací tabulce. Hashtable je synchronizovaná mapa a HashMap je nesynchronizovaná mapa. Pokud však potřebujete použít synchronizovanou mapu, je Hashtable rychlejší než použití HashMapu v synchronizované obálce. Oba jsou kolekce založené na hašiši v Javě, ale mají spravedlivý podíl na rozdílech. Zdůrazňujeme některé klíčové rozdíly mezi nimi, abychom vám pomohli lépe porozumět podmínkám.
HashMap je implementace mapy založená na hašovací tabulce, která poskytuje výkon v konstantním čase pro vkládání a lokalizaci párů. Třída HashMap poskytuje implementaci mapy, která je založena na datové struktuře Hashtable. Tato implementace podporuje všechny operace Map a umožňuje více nulových hodnot, ale pouze jeden nulový klíč. Používá páry klíč / hodnota k ukládání hodnot do tabulky hash. Jedná se o nesynchronizovanou mapu, což znamená, že není bezpečná z hlediska podprocesů a nemůže být sdílena mezi více podprocesy bez řádné synchronizace..
Na rozdíl od HashMap je Hashtable synchronizovanou mapou a je bezpečný pro vlákna, což znamená, že může být sdíleno mezi více vlákny. V Hashtable určete objekt, který lze použít jako klíč, a hodnotu, která jde s klíčem. Hashtable mapuje klíče na hodnoty pomocí hašovací funkce. Java poskytuje tuto funkci ve formě metody hashcode () objektu, kterou třídy přepisují a poskytují vhodné hash kódy. Na rozdíl od HashMap nepodporuje Hashtable nulové hodnoty a nulové klíče, protože v implementaci metody putování Hashtable je nulová kontrola.
Oba jsou kolekce založené na hašiši v Javě, které se používají k ukládání dat ve dvojicích klíč / hodnota. HashMap je implementace mapy založená na hašovací tabulce, která poskytuje výkon v konstantním čase pro vkládání a lokalizaci párů. Výkon lze upravit pomocí konstruktorů, které vám umožňují nastavit kapacitu a faktor zatížení tabulky hash. Základní Hashtable je docela podobný HashMapu, dokonce i nad názvy metod. Ukládá dvojici klíč / hodnota do hašovací tabulky. V Hashtable určete objekt, který lze použít jako klíč, a hodnotu, která jde s klíčem.
HashMap i Hashtable používají hashovací techniky k ukládání hodnot na základě klíče. Stejně jako HashMap i Hashtable používá páry klíč / hodnota k ukládání hodnot do tabulky hash. Klíčovým rozdílem mezi nimi je však synchronizace. HashMap je nesynchronizovaná mapa, zatímco Hashtable je synchronizovaná mapa. To znamená, že HashMap není bezpečný pro podprocesy a nemůže být sdílen mezi více podprocesy bez správného synchronizačního kódu. Naopak, Hashtable je bezpečný pro vlákno a může být sdílen mezi více vlákny. Hashtable je rychlejší než použití HashMap v synchronizovaném obalu, pokud potřebujete použít synchronizovanou mapu.
Třída HashMap poskytuje implementaci mapy, která je založena na datové struktuře Hashtable. Tato implementace podporuje všechny operace Map a umožňuje více nulových hodnot, ale pouze jeden nulový klíč, aby mohla zachovat jedinečné vlastnosti klíče. Neposkytuje však žádné záruky ohledně pořadí, ve kterém jsou záznamy uloženy. Hashtable na druhé straně mapuje klíče na hodnoty pomocí hashovací funkce. Na rozdíl od HashMap nepodporuje Hashtable nulové hodnoty a nulové klíče, protože v implementaci metody putování Hashtable je nulová kontrola.
Protože HashMap není synchronizovaná mapa, je z hlediska výkonu mnohem rychlejší a lepší než Hashtable a ve skutečnosti používá méně paměti než Hashtable. Přestože jsou prakticky identické, je Hashtable o něco pomalejší než HashMap, ale rychlejší než synchronizovaný HashMap. Ve skutečnosti není bezpečné používat hashable s vícevláknovým přístupem, protože jsou synchronizovány pouze metody. Hashtable je synchronizovaný protějšek k HashMap. Nesynchronizované objekty fungují lépe ve srovnání se synchronizovanými objekty, stejně jako Hashtable funguje lépe v prostředí s jedním vláknem.
Třída HashMap vám dává netříděnou, neuspořádanou mapu. Takže pokud potřebujete mapu a nestaráte se o pořadí, ve kterém jsou záznamy uloženy, pak je HashMap způsob, jak jít.
Hashtable, stejně jako Vector, byl v pravěku v Javě. Stejně jako Vector je synchronizovaným protějškem modernějšího a pokročilejšího ArrayListu, Hashtable je synchronizovaným protějškem HashMap. Třídu však nelze synchronizovat, takže když říkáme, že Hashtable je synchronizovaná mapa, znamená to, že klíčové metody třídy jsou synchronizovány.
Zatímco oba jsou prakticky totožné, rozdíl spočívá ve způsobu, jakým jsou synchronizovány a ve způsobu jejich provádění. HashMap pracuje lépe v prostředí s více vlákny, zatímco Hashtable funguje lépe v prostředí s jedním vláknem.