Rozdíl mezi HashMap a Hashtable v Javě

Autor: Laura McKinney
Datum Vytvoření: 2 Duben 2021
Datum Aktualizace: 5 Smět 2024
Anonim
Rozdíl mezi HashMap a Hashtable v Javě - Technologie
Rozdíl mezi HashMap a Hashtable v Javě - Technologie

Obsah


HashMap a Hashtable, oba se používají k reprezentaci a skupina objektů které jsou zastoupeny v pár. Každý nazývá se pár Vstup objekt. sbírka Příspěvek se odkazuje na objekt HashMap a Hashtable. Klíče v kolekci musí být jedinečné nebo výrazné. Rozdíl mezi HashMap a Hashtable je ten HashMap zejména implementuje rozhraní Map, zatímco Hashtable rozšiřuje třídu Dictionary (old class), která je reengineered pro implementaci rozhraní Map. Dalším důležitým rozdílem je, že objekty HashMap jsou nesynchronizované zatímco objekty Hashtable jsou synchronizováno.

Podívejme se na níže uvedený srovnávací graf, abychom zjistili další rozdíly mezi HashMap a Hashtable.


  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Podobnosti
  5. Závěr

Srovnávací tabulka

Základ pro srovnáníHashMapHashtable
Implementovat / rozšířitTřída HashMap implementuje rozhraní Map a rozšiřuje třídu AbstractMap.Hashtable rozšiřuje třídu Dictionary Legacy, ale je přepracován a nyní implementuje rozhraní Map.
SynchronizaceHashMap je nesynchronizovaný, a proto objekt HashMap není bezpečný pomocí podprocesů.Hashtable je synchronizován, a proto je objekt Hashtable bezpečný pro vlákna.
Klíče / HodnotaKlíč může vrátit Null pouze jednou, ale hodnota může vrátit Null libovolný počet časů.Klíč nemůže vrátit Null, protože se používá k získání hash kódu, který bude použit jako index tabulky hash, ani hodnota nemůže vrátit Null.
Výchozí počáteční kapacitaVýchozí počáteční kapacita HashMap je 16.Výchozí počáteční kapacita Hashtable je 11.
TraversingHashMap prochází Iterator.Stejně jako třída třídy Hashtable nepodporuje Iterator přímo pro procházení, a proto používá Enumerator.


Definice HashMap

HashMap je třída, která implementuje Mapa rozhraní a rozšiřuje AbstractMap třída používá hashovou tabulku. Objekt HashMap odkazuje na kolekci / sadu pár, kde je každý klíč mapován na konkrétní hodnotu. Klíče v kolekci musí být jedinečné, protože se používají k získání hodnoty. Na druhé straně lze hodnoty v kolekci duplikovat. Prohlášení třídy HashMap a konstruktérů HashMapclass jsou následující:

/ * K představuje klíč a V představuje hodnotu * / třída HashMap / * Konstruktory třídy HashMap * / HashMap () HashMap (Mapa <? Rozšiřuje K,? Rozšiřuje V> m) HashMap (int kapacita) HashMap (int kapacita, float fillRatio)

První konstruktor je výchozí konstruktor, který inicializuje prázdný objekt HashMap s výchozí kapacitou 16 a výchozím poměrem výplně 0,75. Druhý konstruktor inicializuje hašovací mapu hodnotou m. Třetí konstruktor vytvoří hašovací mapu s počáteční kapacitou odpovídající hodnotě uvedené v argumentu „kapacita“. Čtvrtý konstruktor inicializuje hašovací mapu s kapacitou a poměrem výplně poskytnutými v parametrech. Nyní se naučíme, jak vkládat položky do hashové mapy.

Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * výstup * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

Ve výše uvedeném kódu vidíte, že jsem vytvořil prázdný objekt HashMap hm s výchozí počáteční kapacitou a výchozím poměrem výplně. Poté jsem do hashovy mapy vložil čtyři záznamy pomocí metody put (K, V), která mapuje klíč na hodnotu. Můžete si všimnout, že záznamy nejsou upravovány v posloupnosti, kterou je podáváte, protože pořadí vložení není pevné. Nyní zvažte případ, který již máte v hašovací mapě a poté se pokusíte vložit put (K1, V5), tj. pokusíte se mapovat stejný klíč s jinou hodnotou. Pak metoda put nahradí starou hodnotu V1 novou hodnotou V2 a vrátí starou hodnotu V1, jinak, pokud se nikdy nepokusíme nahradit hodnotu klíče, metoda put vrátí pro tento klíč hodnotu Null.

Definice Hashtable

Hashtable je třída, která rozšiřuje Slovník třída, která je dědictví třídy a je reengineered implementovat Mapa rozhraní. Hashtable používá hash tabulku jako svou datovou strukturu. Hashtable je podobný HashMap, protože zde také odkazuje objekt Hashtable ke sbírce záznamů, kde každá položka je párem . Všechny klíče v kolekci musí být na druhé straně jedinečné, hodnoty lze duplikovat. Klíče se používají zejména k získání hodnoty hash kódu, která rozhoduje o indexu, kde pár bude uložen v hašovací tabulce. V hašovací tabulce nemůže ani klíč ani hodnota vrátit Null ukazatel. Podívejme se na prohlášení třídy Hashtable a konstruktérů třídy hashtable.

/ * K určuje klíč a V určuje hodnotu spojenou s klíčem * / třída Hashtable / * konstruktéři Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? rozšiřuje K,? rozšiřuje V> m)

Ve výše uvedeném kódu je první konstruktor výchozí konstruktor, který vytvoří prázdný objekt třídy Hashtable, jeho výchozí velikost je 11 a výchozí poměr výplně je 0,75. Druhý konstruktor vytvoří hašovací tabulku s velikostí odpovídající hodnotě uvedené v parametru „size“. Třetí konstruktor vytvoří hašovací tabulku s velikostí a poměrem výplně poskytnutou v parametru. Čtvrtý konstruktor inicializuje hašovací tabulku hodnotou m. Nyní se naučíme, jak vložit pár v hašovací tabulce.

Hashtable ht = new Hashtable (); ht.put (nový hashCode (2), 275); ht.put (nový hashCode (12), 250); ht.put (nový hashCode (16), 150); ht.put (nový hashCode (8), 200); System.out.ln (ht); / * výstup * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Ve výše uvedeném kódu jsem vytvořil prázdný objekt Hashtable a vložil čtyři položky pomocí metody put (). V rámci metody put jsem zavolal hashCode (), která vypočítá a vrátí hodnotu hash kódu, která bude sloužit jako hodnota indexu pro vstupní objekt. Jak vidíte, nezmínil jsem se o velikosti hashovací tabulky, takže ve výchozím nastavení bude to 11. Zde také není pořadí vkládání zachováno, a proto, když se ed edice neobjevily v sekvenci, byly krmen.

  1. Implementuje HashMap Mapa rozhraní a rozšiřuje abstraktní třídu, AbstractMap zatímco Hashtable rozšiřuje abstraktní třídu Slovník, což je také třída Legacy, později se znovu implementovala Mapa rozhraní.
  2. Objekt HashMap je nesynchronizované to znamená, že na něm může pracovat více vláken současně, a proto namítá, že vlákna nejsou bezpečná. Na druhé straně jsou objekty Hashtable synchronizováno tj. pokud vlákno chce pracovat s objektem Hashtable, musí získat zámek na tomto objektu, aby k němu nemohl získat přístup žádný jiný vlákno, a proto je vlákno bezpečné.
  3. V HashMap se může vrátit klíč Null pouze jednoua hodnota se může vrátit Několikrát nulová. Na druhou stranu, klíč nikdy nemůže vrátit Null, protože se používá k získání hodnoty hashového kódu, který se používá jako index k uložení pár ani hodnota nemohou vrátit Null.
  4. Výchozí kapacita hashovací tabulky ve třídě HashMap je 16 zatímco výchozí kapacita hashovací tabulky v Hashtable je 11.
  5. Iterátor může procházet položky Hashmapu. Na druhé straně Hashtable nepodporuje přímo Iterátora, a tedy obecně Enumerátor se používá pro procházení položek v Hashtable.

Podobnosti:

  • HashMap a Hashtable používají datovou strukturu systému hash tabulka.
  • HashMap a Hashtable implementují Mapa rozhraní
  • Pořadí vložení není zachováno v HashMap i Hashtable a na základě hash kódu získaného pomocí klíčů.
  • V HashMap a Hashtable musí být Keys unikátní zatímco hodnoty mohou být duplikováno.
  • HashMap a Hashtable mohou obsahovat heterogenní objekty pro klíče i hodnoty.
  • HashMap a Hashtable, oba implementují Serializovatelné a Klonovatelné rozhraní ale ne náhodný přístup.
  • HashMap a Hashtable mají výchozí poměr výplně 0.75.
  • HashMap a Hashtable jsou nejlepší pro vyhledávání nebo vyhledávání operace.

Závěr:

HashMap má lepší výkon, protože jeho objekty jsou nesynchronizované a může na něm pracovat více vláken současně, a proto je rychlejší než Hashtable.