Razlika med Java in HashMapom

Avtor: Laura McKinney
Datum Ustvarjanja: 2 April 2021
Datum Posodobitve: 5 Maj 2024
Anonim
Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]
Video.: Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]

Vsebina


HashMap in Hashtable, oba se uporabljata za predstavljanje a skupina predmetov ki so predstavljeni v par. Vsak par se imenuje Vstop objekt. The zbirka vnosov se nanašata na objekt HashMap in Hashtable. Ključi v zbirki morajo biti edinstveni ali razpoznavni. Razlika med HashMapom in Hashtableom je v tem HashMap zlasti izvaja vmesnik Map, medtem ko Hashtable razširja razred slovarja (zapuščeni razred), ki je znova zasnovan za implementacijo vmesnika Map. Druga pomembna razlika je, da so predmeti HashMap-a nesinhronizirano ker so predmeti Haštableta sinhronizirano.

Poglejmo spodnjo primerjalno tabelo, če želite izvedeti še nekaj razlik med HashMapom in Hashtable-om.

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Podobnosti
  5. Zaključek

Primerjalna tabela

Osnove za primerjavoHashMapHashtable
Izvedba / razširitevRazred HashMap izvaja vmesnik Map in razširja razred AbstractMap.Hashtable razširja razred Legacy, vendar je na novo zasnovan in zdaj uporablja tudi vmesnik Map.
SinhronizacijaHashMap je nesinhroniziran, zato objekt HashMap ni varno z navojem.Hashtable je sinhroniziran, zato je predmet Hashtable varno na nitkah.
Ključi / vrednostKljuč lahko Null vrne samo enkrat, vrednost pa lahko Null vrne poljubno število.Ključ ne more vrniti Null, saj je uporabljen za pridobitev hash kode, ki bo uporabljena kot indeks hash tabele, niti vrednost ne more vrniti Null.
Privzeta začetna zmogljivostPrivzeta začetna zmogljivost HashMap-a je 16.Privzeta začetna zmogljivost Hashtable-a je 11.
PotovanjeHashMap prečka Iterator.Tako kot razred razred Hashtable tudi Iterator ne podpira neposredno prehajanja, zato uporablja Enumerator.


Opredelitev HashMap-a

HashMap je razred, ki izvaja program Zemljevid vmesnik in razširja AbstractMap razred uporablja hash tabelo. Predmet HashMap se nanaša na zbirko / niz par, kjer je vsak ključ preslikan na določeno vrednost. Ključi v zbirki morajo biti edinstveni, saj se uporabljajo za pridobivanje vrednosti. Po drugi strani pa se vrednosti v zbirki lahko podvojijo. Izjava razreda HashMap in konstruktorjev HashMapclass je naslednja:

/ * K predstavlja ključ, V pa vrednost * / razred HashMap / * Konstruktorji razreda HashMap * / HashMap () HashMap (Map <? Podaljša K,? Razširi V> m) HashMap (int kapaciteta) HashMap (int kapaciteta, float fillRatio)

Prvi konstruktor je privzeti konstruktor, ki inicializira prazen predmet HashMap s privzeto zmogljivostjo 16 in privzeto razmerje polnjenja 0,75. Drugi konstruktor inicializira hash zemljevid z vrednostjo m. Tretji konstruktor ustvari hash map z začetno zmogljivostjo, ki ustreza vrednosti, podani v argumentu "zmogljivost". Četrti konstruktor inicializira hash map z zmogljivostjo in razmerjem polnjenja, ki je naveden v parametrih. dovolite, da se zdaj naučimo, kako vnašati na vhodne karte.


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

V zgornji kodi vidite, da sem ustvaril prazen predmet HashMap hm s privzeto začetno zmogljivostjo in privzeto razmerje polnjenja. Nato sem v hash map vstavil štiri vnose po metodi put (K, V), ki ključ preslika na vrednost. Lahko opazite, da vnosi niso urejeni v zaporedju, v katerem jih hranite, ker vrstni red vstavljanja ni določen. Zdaj razmislite o primeru, v katerem že imate vnos na zemljevid hash in po tem poskusite vstaviti put (K1, V5), to je, da poskusite preslikati isti ključ z drugačno vrednostjo. Nato metoda put nadomesti staro vrednost V1 z novo vrednostjo V2 in vrne staro vrednostV1, sicer pa, če nikoli ne poskusimo nadomestiti vrednosti ključa, potem metoda put vrne Null za ta ključ.

Opredelitev Hashtable-a

Hashtable je razred, ki podaljša Slovar razreda, ki je podedovani razred in je prenovljen za izvajanje Zemljevid vmesnik. Hashtable kot svojo strukturo podatkov uporablja hash tabelo. Hashtable je podoben HashMapu, saj se tudi tukaj predmet Hashtable nanaša na zbirko vnosov, kjer je vsak vnos par . Po drugi strani morajo biti vsi ključi v zbirki edinstveni, vrednosti se lahko podvojijo. Tipke se še posebej uporabljajo za pridobitev vrednosti hash kode, ki določa indeks, kjer je par bo shranjen v hash tabeli. V tabeli hash niti ključ niti vrednost ne moreta vrniti Null kazalec. Poglejmo izjavo o razredu Hashtable in konstruktorje razreda haštable.

/ * K poda ključ, V pa vrednost, povezano s tipko * / razred Hashtable / * konstruktorji Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? razširja K,? se razteza V> m)

V zgornji kodi je prvi konstruktor privzeti konstruktor, ki ustvari prazen predmet razreda Hashtable, njegova privzeta velikost je 11, privzeto razmerje polnjenja pa 0,75. Drugi konstruktor ustvari hash tabelo z velikostjo, ki ustreza vrednosti, podani v parametru "size". Tretji konstruktor ustvari hash tabelo z velikostjo in razmerjem polnjenja v parametru. Četrti konstruktor inicializira hash tabelo z vrednostjo m. Naučimo se zdaj, kako vstaviti par v tabeli hash.

Hashtable ht = nov 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); / * izhod * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

V zgornji kodi sem ustvaril prazen predmet Hashtable in vstavil štiri vnose po metodi put (). Znotraj postavljene metode sem poklical hashCode (), ki izračuna in vrne vrednost hash kode, ki bo delovala kot vrednost indeksa za vnosni objekt. Kot lahko vidite, nisem omenil velikosti hash tabele, zato bo privzeto enaka 11. Tukaj tudi vrstni red vstavljanja ni ohranjen, torej, ko se vnosi ed niso pojavili v zaporedju, ko je bil vstavljen.

  1. Izvaja HashMap Zemljevid vmesnik in razširi abstraktni razred, AbstractMap ker Hashtable razširja abstraktni razred Slovar, ki je tudi razred Legacy, pozneje prenovljen za izvedbo Zemljevid vmesnik.
  2. Objekt HashMap je nesinhronizirano to pomeni, da na njej lahko hkrati deluje več niti, zato predmeti niso varni z nitmi. Po drugi strani so predmeti Haštable sinhronizirano tj. če nit želi delovati na objektu Hashtable, mora pridobiti ključavnico na tem objektu, tako da nobena druga nit ne more dostopati do tega predmeta in je torej varna z nitmi.
  3. V HashMap se lahko vrne ključ Nič samo enkratin vrednost se lahko vrne Nič večkrat. Po drugi strani ključ nikoli ne more vrniti Null, kot je bil uporabljen za pridobitev vrednosti hash kode, ki se uporablja kot indeks za shranjevanje par in vrednost ne moreta vrniti Null.
  4. Privzeta zmogljivost hash tabele v razredu HashMap je 16 ker je privzeta zmogljivost hash tabele v Hashtable-u enaka 11.
  5. The Iterator lahko prečkajo vnose Hashmapa. Po drugi strani Hashtable neposredno ne podpira Iteratorja in s tem na splošno Popisnik se uporablja za prečkanje vnosov v Hashtable.

Podobnosti:

  • HashMap in Hashtable uporabljata podatkovno strukturo hash table.
  • HashMap in Hashtable obe izvedbi Zemljevid vmesnik
  • Vrstni red vstavitve ni ohranjen tako v HashMap-u in Hashtable-u in temelji na hash kodi, pridobljeni s pomočjo tipk.
  • V HashMap-u in Hashtable-u morajo biti ključi edinstven ker so lahko vrednosti podvojena.
  • HashMap in Hashtable lahko vsebujejo heterogeni predmeti tako za ključe kot za vrednosti.
  • HashMap in Hashtable, obe izvedbi Izvedljivo in Kloniranje vmesniki, vendar ne, naključni dostop.
  • HashMap in Hashtable imata privzeto razmerje polnjenja 0.75.
  • HashMap in Hashtable sta najboljša za iskanje oz iskanje operacije.

Zaključek:

HashMap je boljši v zmogljivosti, saj so njegovi predmeti nesinhronizirani in nanje lahko hkrati deluje več niti, zato je hitrejši od Hashtable-a.