HashMap a Hashtable

Anonim

Rámec Java Collections poskytuje soubor tříd sbírek. Každá třída má své vlastní silné a slabé stránky. Některé třídy poskytují plné implementace, které lze použít jako-is. Jiné jsou abstraktní, které poskytují skeletové implementace, které se používají jako výchozí body pro vytváření sbírek. Implementace kolekce používají rámec synchronizovaného wrapperu pro synchronizované třídy, jinak jsou implementace nesynchronizovány. Několik tříd poskytuje implementaci mapového rozhraní.

Platforma Java obsahuje tři obecné implementace Map: HashMap, TreeMap a LinkedHashMap. HashMap a Hashtable jsou dvě sbírky v jazyce Java, které se používají k ukládání dvojic klíč / hodnota do tabulky hash. Hashtable je synchronizovaná mapa a HashMap je nesynchronizovaná mapa. Nicméně pokud potřebujete použít synchronizovanou mapu, Hashtable je rychlejší než použití HashMap v synchronizovaném obalu. Oba jsou kolekce založené na hash v Javě, ale mají svůj spravedlivý rozdíl. Zdůrazňujeme některé klíčové rozdíly mezi těmito dvěma, abychom vám lépe porozuměli podmínkám.

Co je HashMap?

HashMap je implementace map založená na hash tabulce, která poskytuje konstantní čas pro vložení 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 mapy a umožňuje několik nulových hodnot, ale pouze jeden nulový klíč. Používá páry klíč / hodnota pro ukládání hodnot v tabulce hash. Jedná se o nesynchronizovanou mapu, což znamená, že není bezpečné pro vlákno a nemůže být sdíleno mezi více vlákny bez řádné synchronizace.

Co je Hashtable?

Na rozdíl od HashMap, Hashtable je synchronizovaná mapa a je bezpečné pro vlákno, což znamená, že může být sdíleno mezi více vlákny. Ve službě Hashtable určíte objekt, který lze použít jako klíč a hodnotu, která se s klíčem používá. Hashtable mapuje klíče hodnot pomocí funkce hash. Java poskytuje tuto funkci ve formě metody hashcode () objektu, která přepíše třídy a poskytuje příslušné kódy hash. Na rozdíl od HashMapu, Hashtable nepodporuje nulové hodnoty a nulové klíče, protože v implementační metodě Hashtable je nulová kontrola.

Rozdíl mezi HashMap a Hashtable

  1. Základy HashMap Vs. Hashtable

Oba jsou kolekce založené na hash v jazyce Java, které slouží k ukládání dat v párech klíč / hodnota. HashMap je implementace map založená na hash tabulce, která poskytuje konstantní čas pro vložení a lokalizaci párů. Výkon lze nastavit pomocí konstruktorů, které umožňují nastavit kapacitu a faktor zatížení tabulky hash. Základní Hashtable je poměrně podobný HashMapu, dokonce i názvy metod. Ukládá dvojici klíčů / hodnot do tabulky hash. Ve službě Hashtable určíte objekt, který lze použít jako klíč a hodnotu, která se s klíčem používá.

  1. Synchronizace HashMap Vs. Hashtable

Jak HashMap, tak Hashtable používají techniky hašování k ukládání hodnot založených na klíči. Stejně jako HashMap, Hashtable používá páry klíč / hodnota pro ukládání hodnot v tabulce hash. Klíčovým rozdílem mezi těmito dvěma je však synchronizace. HashMap je nesynchronizovaná mapa, zatímco Hashtable je synchronizovaná mapa. To znamená, že HashMap není bezpečný pro vlákno a nemůže být sdílen mezi více vlákny 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.

  1. Nulové klíče a nulové hodnoty pro HashMap Vs. Hashtable

Třída HashMap poskytuje implementaci mapy, která je založena na datové struktuře Hashtable. Tato implementace podporuje všechny operace Mapu a umožňuje několik nulových hodnot, ale pouze jeden nulový klíč, takže může zachovat jedinečné vlastnosti klíčů. Neposkytuje však žádné záruky v pořadí, v jakém jsou záznamy uloženy. Hashtable na druhé straně mapuje klíče hodnot pomocí funkce hash. Na rozdíl od HashMapu, Hashtable nepodporuje nulové hodnoty a nulové klíče, protože v implementační metodě Hashtable je nulová kontrola.

  1. Výkonnost HashMap Vs. Hashtable

Vzhledem k tomu, že HashMap není synchronizovaná mapa, je mnohem rychlejší a lepší než výkonný, a ve skutečnosti používá méně paměti než Hashtable. I když jsou prakticky totožné, Hashtable je o něco pomalejší než HashMap, ale rychlejší než synchronizovaný HashMap. V podstatě není bezpečné používat Hashtable s vícevláknovým přístupem, protože jsou synchronizovány pouze metody. Hashtable je synchronizovaný protějšek k programu HashMap. Nesynchronizované objekty fungují lépe ve srovnání se synchronizovanými objekty, jako je například Hashtable, což je lepší v jednom závitovém prostředí.

HashMap vs. Hashtable: Srovnávací graf

Shrnutí HashMap Vs. Hashtable

Třída HashMap vám dává netříděnou neuspořádanou mapu. Takže když potřebujete Mapu a nezáleží na pořadí, ve kterém jsou položky uloženy, pak je HashMap způsob, jak jít.

Hashtable, stejně jako Vector, pochází z prehistorických časů Java. Stejně jako Vector je synchronizovaný protějšek modernějšího a pokročilejšího ArrayList, Hashtable je synchronizovaný protějšek k HashMapu. 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 shodné, rozdíl spočívá v tom, jak jsou synchronizovány a jak fungují. HashMap funguje lépe v prostředí s více závitmi, zatímco Hashtable je lepší v jednom závitovém prostředí.