Skirtumas tarp „HashMap“ ir „Hashtable“ „Java“

Autorius: Laura McKinney
Kūrybos Data: 2 Balandis 2021
Atnaujinimo Data: 5 Gegužė 2024
Anonim
Skirtumas tarp „HashMap“ ir „Hashtable“ „Java“ - Technologija
Skirtumas tarp „HashMap“ ir „Hashtable“ „Java“ - Technologija

Turinys


„HashMap“ ir „Hashtable“ yra naudojami tiek objektų grupė kurie vaizduojami pora. Kiekvienas pora vadinama Įėjimas objektas. kolekcija įrašų nurodo „HashMap“ ir „Hashtable“ objektai. Raktai kolekcijoje turi būti unikalūs ar išskirtiniai. Skirtumas tarp „HashMap“ ir „Hashtable“ yra tas „HashMap“ ypač įgyvendina žemėlapio sąsają, o Puikus praplečia žodyno klasę (seną klasę), kuri yra pertvarkyta įgyvendinti žemėlapio sąsają. Kitas svarbus skirtumas yra tas, kad „HashMap“ objektai yra nesinchronizuotas kadangi „Hashtable“ objektai yra sinchronizuotas.

Pažiūrėkime į žemiau pateiktą palyginimo lentelę, norėdami sužinoti daugiau apie „HashMap“ ir „Hashtable“ skirtumus.

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Panašumai
  5. Išvada

Palyginimo diagrama

Palyginimo pagrindas„HashMap“Puikus
Įdiegti / išplėsti„HashMap“ klasė įgyvendina žemėlapio sąsają ir praplečia „AbstractMap“ klasę.„Hashtable“ apima „Legacy“ žodyno klasę, tačiau ji yra pertvarkyta ir dabar joje įdiegta žemėlapio sąsaja.
Sinchronizavimas„HashMap“ nėra sinchronizuotas, taigi „HashMap“ objektas nėra saugus sriegiais.„Hashtable“ yra sinchronizuotas, taigi „Hashtable“ objektas yra saugus siūlams.
Raktai / vertėRaktas gali grąžinti nulį tik vieną kartą, bet reikšmė gali grąžinti nulį bet kurį laiką.Raktas negali grąžinti Null, nes jis naudojamas maišos kodui gauti, kuris bus naudojamas kaip maišos lentelės rodyklė, o vertė negali grąžinti Null.
Numatytasis pradinis pajėgumasNumatytasis pradinis „HashMap“ talpa yra 16.Numatytasis pradinis „Hashtable“ talpa yra 11.
Apvažiavimas„HashMap“ apeina „Iterator“.Kaip ir „Map Class“ klasė, „Hashtable“ taip pat tiesiogiai nepalaiko „Iterator“ važiuodami, taigi naudoja „Enumerator“.


Apibrėžimas HashMap

„HashMap“ yra klasė, įgyvendinanti Žemėlapis sąsaja ir praplečia AnotacijaMap klasė naudoja maišos lentelę. „HashMap“ objektas reiškia kolekciją / rinkinį pora, kur kiekvienas raktas yra susietas su tam tikra verte. Kolekcijos raktai turi būti unikalūs, nes jie naudojami vertei nuskaityti. Kita vertus, kolekcijos vertės gali būti dubliuojamos. „HashMap“ klasės ir „HashMapclass“ konstruktorių deklaracija yra tokia:

/ * K žymi raktą, o V reiškia reikšmę * / klasė HashMap / * „HashMap“ klasės konstruktoriai * / „HashMap“ () „HashMap“ (žemėlapis <? Išplečia K,? Išplečia V> m) „HashMap“ (vidinė talpa) „HashMap“ (vidinė talpa, „float fillRatio“)

Pirmasis konstruktorius yra numatytasis konstruktorius, kuris inicijuoja tuščią „HashMap“ objektą, kurio numatytoji talpa yra 16 ir numatytasis užpildymo santykis yra 0,75. Antrasis konstruktorius inicijuoja maišos žemėlapį su m reikšme. Trečiasis konstruktorius sukuria maišos žemėlapį su pradine talpa, atitinkančia argumentą „talpa“. Ketvirtasis konstruktorius inicijuoja maišos žemėlapį, nurodydamas parametrų talpą ir užpildymo santykį. leiskite mums dabar išmokti įterpti įrašus maišos žemėlapyje.


„Hashmap hm“ = nauja „Hashmap“ (); hm.put („Ajay“, 275); hm.put („Vijay“, 250); hm.put („Jonny“, 150); hm.put („Jordan“, 200); System.out.ln (hm); / * išėjimas * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

Aukščiau esančiame kode galite pamatyti, kad aš sukūriau tuščią „HashMap“ objektą hm su numatytąja pradine talpa ir numatytuoju užpildymo santykiu. Tada aš įdėjau keturis įrašus į maišos žemėlapį, naudodamas put (K, V) metodą, kuris nusako raktą prie vertės. Galite pastebėti, kad įrašai nėra taisomi seka, kuria jūs juos pateikiate, nes įdėjimo tvarka nėra nustatyta. Dabar apsvarstykite atvejį, kai jau turite įrašą maišos žemėlapyje ir po to bandote įterpti put (K1, V5), tai yra, jūs bandote tą patį raktą pažymėti skirtinga reikšme. Tada pardavimo metodas pakeis senąją reikšmę V1 nauja verte V2 ir grąžins senąją vertę V1. Priešingu atveju, jei niekada nemėginsime pakeisti rakto vertės, tada įdėjimo metodas grąžina nuliui tą raktą.

„Hashtable“ apibrėžimas

„Hashtable“ yra klasė, pratęsianti Žodynas klasė, kuri yra sena klasė ir perprojektuota įgyvendinti Žemėlapis sąsaja. „Hashtable“ naudoja maišos lentelę kaip savo duomenų struktūrą. „Hashtable“ yra panašus į „HashMap“, nes čia taip pat „Hashtable“ objektas nurodo įrašų kolekciją, kur kiekvienas įrašas yra pora . Visi kolekcijos raktai, priešingai, turi būti unikalūs, vertės gali būti dubliuojamos. Klavišai ypač naudojami maišos kodo vertei gauti, pagal kurią nustatoma rodyklė, kur pora bus saugoma maišos lentelėje. Maišos lentelėje nei raktas, nei reikšmė negali grąžinti Null žymeklio. Pažvelkime į „Hashtable“ klasės ir „hashtable“ klasės konstruktorių deklaraciją.

/ * K nurodo raktą, o V nurodo su raktu * / klasės „Hashtable“ susietą vertę / * Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? tęsiasi K,? tęsiasi V> m)

Aukščiau pateiktame kode pirmasis konstruktorius yra numatytasis konstruktorius, sukuriantis tuščią klasės „Hashtable“ objektą, jo numatytasis dydis yra 11, o numatytasis užpildymo santykis yra 0,75. Antrasis konstruktorius sukuria maišos lentelę, kurios dydis atitinka parametro „dydis“ nurodytą vertę. Trečiasis konstruktorius sukuria maišos lentelę su parametru pateiktu dydžiu ir užpildymo santykiu. Ketvirtasis konstruktorius inicijuoja maišos lentelę reikšme m. Leiskite mums dabar išmokti įterpti pora maišos stalo.

„Hashtable ht“ = naujas „Hashtable“ (); ht.put (naujas maišos kodas (2), 275); ht.put (naujas maišos kodas (12), 250); ht.put (naujas maišos kodas (16), 150); ht.put (naujas maišos kodas (8), 200); System.out.ln (ht); / * išėjimas * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Aukščiau esančiame kode aš sukūriau tuščią „Hashtable“ objektą ir įdėjau keturis įrašus naudodamas „put ()“ metodą. Inside put metodu aš vadinau hashCode (), kuris apskaičiuoja ir grąžina maišos kodo vertę, kuri veiks kaip įvesties objekto rodyklės vertė. Kaip matote, aš neminėjau maišos lentelės dydžio, taigi pagal numatytuosius nustatymus ji bus 11. Čia taip pat neišsaugoma įterpimo tvarka, taigi, kai ed įrašai nebuvo rodomi seka, jis buvo tiekiamas.

  1. „HashMap“ padargai Žemėlapis sąsaja ir praplečia abstrakčią klasę, AnotacijaMap kadangi „Hashtable“ praplečia abstrakčių klasę Žodynas, kuri taip pat yra „Legacy“ klasė, vėliau perprojektuota įgyvendinti Žemėlapis sąsaja.
  2. „HashMap“ objektas yra nesinchronizuotas t.y., keli sriegiai gali tuo pačiu metu veikti, taigi, ji prieštarauja saugai siūlams. Kita vertus, „Hashtable“ objektai yra sinchronizuotas y., jei gija nori veikti su „Hashtable“ objektu, ji turi įsigyti to objekto užraktą, kad joks kitas gija negalėtų pasiekti to objekto, taigi, jis yra saugus sriegiui.
  3. „HashMap“ klavišas gali grįžti Niekada tik vieną kartą, ir vertė gali sugrįžti Nulis kelis kartus. Kita vertus, raktas niekada negali grąžinti nulinio vertės, nes jis naudojamas maišos kodo vertei gauti, kuris naudojamas kaip rodyklė saugoti pora ir nė viena vertė negali grąžinti Null.
  4. Numatytoji maišos lentelės talpa HashMap klasėje yra 16 kadangi numatytasis maišos lentelės talpa „Hashtable“ yra 11.
  5. Iteratorius gali pereiti Hashmap įrašus. Kita vertus, „Hashtable“ tiesiogiai nepalaiko Iteratoriaus ir todėl apskritai Enumerator naudojamas įrašams perkelti į „Hashtable“.

Panašumai:

  • „HashMap“ ir „Hashtable“ naudoja duomenų bazės duomenų struktūrą maišos stalas.
  • Abu „HashMap“ ir „Hashtable“ padargai Žemėlapis sąsaja
  • Įterpimo tvarka neišsaugota tiek „HashMap“, tiek „Hashtable“ ir pagrįstas maišos kodu, gautu naudojant raktus.
  • „HashMap“ ir „Hashtable“ klavišai turi būti Unikalus kadangi vertės gali būti dubliuotas.
  • „HashMap“ ir „Hashtable“ gali būti tiek nevienalyčiai objektai tiek klavišais, tiek vertybėmis.
  • Abu įrankiai „HashMap“ ir „Hashtable“ Serializuojamas ir Klonuojamas sąsajos, bet ne, atsitiktinė prieiga.
  • „HashMap“ ir „Hashtable“ abu turi numatytąjį užpildymo santykį 0.75.
  • Geriausiai tinka „HashMap“ ir „Hashtable“ ieškojimas operacijos.

Išvada:

„HashMap“ našumas yra geresnis, nes jos objektai nėra sinchronizuoti ir keli gijos gali tuo pačiu metu veikti, taigi, ji yra greitesnė nei „Hashtable“.