Rozdiel medzi HashMap a Hashtable v Jave

Autor: Laura McKinney
Dátum Stvorenia: 2 Apríl 2021
Dátum Aktualizácie: 5 Smieť 2024
Anonim
Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]
Video: Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]

Obsah


HashMap a Hashtable sa používajú na označenie a skupina objektov ktoré sú zastúpené v pair. každý volá sa pár vstup objekt. zbierka Príspevkov sa odkazuje na objekty HashMap a Hashtable. Kľúče v zbierke musia byť jedinečné alebo výrazné. Rozdiel medzi HashMap a Hashtable je ten HashMap najmä implementuje rozhranie mapy, zatiaľ čo Hashtable rozširuje triedu Slovník (starú triedu), ktorá je navrhnutá tak, aby implementovala rozhranie Map. Ďalším dôležitým rozdielom je, že objekty HashMapu sú unsynchronized zatiaľ čo objekty Hashtable sú synchronizované.

Pozrime sa na nasledujúcu porovnávaciu tabuľku, aby sme sa dozvedeli viac rozdielov medzi HashMap a Hashtable.

  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. podobnosti
  5. záver

Porovnávacia tabuľka

Základ pre porovnanieHashMapHashtable
Implementácia / rozšírenieTrieda HashMap implementuje rozhranie Map a rozširuje triedu AbstractMap.Hashtable rozširuje triedu Dictionary Legacy, ale je prepracovaný a teraz implementuje aj Mapové rozhranie.
synchronizáciaHashMap je nesynchronizovaný, a preto objekt HashMap nie je bezpečný.Hashtable je synchronizovaný, a preto je objekt Hashtable bezpečný pre vlákna.
Tlačidlá / hodnotaKľúč môže vrátiť hodnotu Null iba raz, ale hodnota môže vrátiť hodnotu Null ľubovoľný počet časov.Kľúč nemôže vrátiť hodnotu Null, pretože sa používa na získanie kódu hash, ktorý sa použije ako index tabuľky hash, ani hodnota nemôže vrátiť hodnotu Null.
Predvolená počiatočná kapacitaPredvolená počiatočná kapacita HashMap je 16.Predvolená počiatočná kapacita Hashtable je 11.
pojazdovýHashMap prechádza Iterator.Rovnako ako mapa triedy Hashtable tiež priamo nepodporuje Iterator pre prechádzanie, a preto používa Enumerator.


Definícia HashMap

HashMap je trieda, ktorá implementuje mapa rozhranie a rozširuje AbstractMap trieda používa hashovaciu tabuľku. Objekt HashMap odkazuje na kolekciu / množinu pár, kde je každý kľúč mapovaný na konkrétnu hodnotu. Kľúče v kolekcii musia byť jedinečné, pretože sa používajú na získanie hodnoty. Na druhej strane môžu byť hodnoty v kolekcii duplikované. Vyhlásenie triedy HashMap a konštruktérov HashMapclass sú nasledujúce:

/ * K predstavuje kľúč a V predstavuje hodnotu * / trieda HashMap / * Konštruktori triedy HashMap * / HashMap () HashMap (Mapa <? Rozširuje K,? Rozširuje V> m) HashMap (int kapacita) HashMap (int kapacita, float fillRatio)

Prvý konštruktor je predvolený konštruktor, ktorý inicializuje prázdny objekt HashMap s predvolenou kapacitou 16 a predvoleným pomerom plnenia 0,75. Druhý konštruktor inicializuje hašovaciu mapu s hodnotou m. Tretí konštruktér vytvorí hašovaciu mapu s počiatočnou kapacitou zodpovedajúcou hodnote poskytnutej v argumente „kapacita“. Štvrtý konštruktor inicializuje hašovaciu mapu s kapacitou a pomerom vyplnenia poskytnutými v parametroch. Poďme sa teraz naučiť, ako vložiť položky do mapy hash.


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}

Vo vyššie uvedenom kóde vidíte, že som vytvoril prázdny objekt HashMap hm s predvolenou počiatočnou kapacitou a predvoleným pomerom plnenia. Potom som do hashovej mapy vložil štyri záznamy pomocou metódy put (K, V), ktorá mapuje kľúč na hodnotu. Môžete si všimnúť, že záznamy nie sú upravené v poradí, v akom ich podávate, pretože poradie vkladania nie je pevne stanovené. Teraz zvážte prípad, ktorý už máte zadaný do hashovej mapy a potom sa pokúsite vložiť put (K1, V5), t. j. pokúsite sa mapovať ten istý kľúč s inou hodnotou. Potom metóda put nahradí starú hodnotu V1 novou hodnotou V2 a vráti starú hodnotuV1, inak, ak sa nikdy nepokúsime nahradiť hodnotu kľúča, metóda put vráti hodnotu Null pre tento kľúč.

Definícia hashtable

Hashtable je trieda, ktorá rozširuje internet slovník trieda, ktorá je dedičnou triedou a je upravená na implementáciu mapa rozhranie. Hashtable používa hašovaciu tabuľku ako svoju dátovú štruktúru. Hashtable je podobný ako HashMap, pretože tu tiež odkazuje objekt Hashtable na zbierku záznamov, kde každá položka je párom , Všetky kľúče v kolekcii musia byť na druhej strane jedinečné, hodnoty je možné duplikovať. Klávesy sa používajú najmä na získanie hodnoty hash kódu, ktorá rozhoduje o indexe, kde pár bude uložený v hašovacej tabuľke. V hašovacej tabuľke nemôže kľúč ani hodnota vrátiť nulový ukazovateľ. Pozrime sa na vyhlásenie triedy hashable a konštruktérov triedy hashtable.

/ * K určuje kľúč a V určuje hodnotu spojenú s kľúčom * / trieda Hashtable / * konštruktéri Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (mapa <? rozširuje K,? rozširuje V> m)

Vo vyššie uvedenom kóde je prvý konštruktor predvolený konštruktor, ktorý vytvára prázdny objekt triedy Hashtable, jeho predvolená veľkosť je 11 a predvolený pomer plnenia je 0,75. Druhý konštruktor vytvorí hašovaciu tabuľku s veľkosťou zodpovedajúcou hodnote uvedenej v parametri „size“. Tretí konštruktor vytvorí hašovaciu tabuľku s veľkosťou a výplňovým pomerom poskytnutým v parametri. Štvrtý konštruktor inicializuje hashovaciu tabuľku hodnotou m. Naučme sa teraz, ako vložiť pár v hašovacej tabuľke.

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}

Vo vyššie uvedenom kóde som vytvoril prázdny objekt Hashtable a pomocou metódy put () som vložil štyri záznamy. V rámci metódy put som zavolal hashCode (), ktorá vypočíta a vráti hodnotu hash kódu, ktorá bude slúžiť ako hodnota indexu pre vstupný objekt. Ako vidíte, nespomenul som veľkosť hashovej tabuľky, takže v predvolenom nastavení to bude 11. Aj tu sa poradie vkladania nezachová, a teda keď sa ed edície neobjavili v poradí, v akom boli kŕmené.

  1. Implementuje HashMap mapa rozhranie a rozširuje abstraktnú triedu, AbstractMap zatiaľ čo Hashtable rozširuje abstraktnú triedu slovník, čo je tiež trieda Legacy, ktorá bola neskôr implementovaná mapa rozhranie.
  2. Objekt HashMap je unsynchronized to znamená, že na nej môže súčasne pracovať viac vlákien, a teda nie sú bezpečné. Na druhej strane, objekty Hashtable sú synchronizované t. j. ak vlákno chce pracovať s objektom Hashtable, musí získať zámok na tomto objekte, aby k nemu nemohol mať prístup žiadny iný závit, a preto je bezpečné vlákno.
  3. V HashMap sa môže vrátiť kláves Null iba raza hodnota sa môže vrátiť Niekoľkokrát null, Na druhej strane, kľúč nikdy nemôže vrátiť Null, pretože sa používa na získanie hodnoty hash kódu, ktorá sa používa ako index na uloženie pár ani hodnota nemôžu vrátiť Null.
  4. Predvolená kapacita hashovej tabuľky v triede HashMap je 16 keďže predvolená kapacita hashovej tabuľky v hashtable je 11.
  5. iterátor môže prechádzať položkami Hashmapu. Hashtable na druhej strane priamo nepodporuje Iterátor, a teda všeobecne Enumerátor sa používa na prechádzanie záznamov v Hashtable.

podobnosti:

  • HashMap aj Hashtable používajú dátovú štruktúru systému hash tabuľka.
  • HashMap a Hashtable implementujú mapa rozhranie
  • Poradie vkladania sa nezachová v HashMap aj Hashtable a na základe hash kódu získaného pomocou kľúčov.
  • V HashMap a Hashtable musia byť Keys jedinečný zatiaľ čo hodnoty môžu byť duplicitné.
  • HashMap aj Hashtable môžu obsahovať heterogénne objekty pre kľúče aj hodnoty.
  • HashMap a Hashtable, oba implementujú Serializable a Cloneable rozhrania, ale nie náhodný prístup.
  • HashMap aj Hashtable majú predvolený pomer plnenia 0.75.
  • HashMap a Hashtable sú najlepšie na vyhľadávanie alebo vyhľadávanie operácie.

záver:

HashMap má lepšiu výkonnosť, pretože jeho objekty sú nesynchronizované a na ňom môže fungovať viacero vlákien súčasne, a preto je rýchlejší ako Hashtable.