Razlika med HashMap in Hashtable

Okvir Java Collections ponuja niz razredov zbiranja. Vsak razred ima svoje prednosti in slabosti pri uspešnosti. Nekateri razredi ponujajo popolne izvedbe, ki jih je mogoče uporabiti kot je. Druge so abstraktne in zagotavljajo okostne izvedbe, ki se uporabljajo kot izhodišča za ustvarjanje zbirk. Izvedbe zbirke uporabljajo okvir sinhroniziranega zavijanja za zagotavljanje sinhroniziranih razredov, sicer pa so implementacije nesinhronizirane. Več razredov ponuja izvedbe vmesnika zemljevidov.

Platforma Java vsebuje tri izvedbe zemljevidov splošnega pomena: HashMap, TreeMap in LinkedHashMap. HashMap in Hashtable sta dve zbirki na Javi, ki se uporabljata za shranjevanje parov ključ / vrednost v tabelo hash. Hashtable je sinhroniziran zemljevid, HashMap pa nesinhroniziran zemljevid. Če želite uporabiti sinhronizirani zemljevid, je Hashtable hitrejši kot uporaba HashMap-a v sinhroniziranem ovoju. Oba sta na Javi zasnovana na hash zbirkah, vendar imata pravičen delež razlik. Izpostavljamo nekaj ključnih razlik med obema, da bi lažje razumeli izraze.

Kaj je HashMap?

HashMap je implementacija zemljevida, ki temelji na hash tabeli, ki zagotavlja stalno zmogljivost za vstavljanje in lociranje parov. Razred HashMap zagotavlja izvedbo zemljevidov, ki temelji na strukturi podatkov Hashtable. Ta implementacija podpira vse operacije Zemljevida in omogoča več ničelnih vrednosti, vendar le eno ničelno tipko. Za shranjevanje vrednosti v hash tabelo uporablja pare ključ / vrednost. Je nesinhroniziran zemljevid, kar pomeni, da ni varno po niti in ga ni mogoče deliti med več niti brez ustrezne sinhronizacije.

Kaj je Hashtable?

Za razliko od HashMap-a je Hashtable sinhroniziran zemljevid in je varno po nitkah, kar pomeni, da ga lahko delite med več niti. V Hashtable podate predmet, ki ga je mogoče uporabiti kot ključ, in vrednost, ki gre skupaj s ključem. Hashtable preslika ključe na vrednosti s pomočjo hash funkcije. Java ponuja to funkcijo v obliki metode hashcode () Object, ki razredi preglasi, da zagotovi ustrezne hash kode. Za razliko od HashMap-a Hashtable ne podpira ničelnih vrednosti in null-tipk, ker je v izvedbi metode Hashtable metoda put null.

Razlika med HashMap in Hashtable

  1. Osnove HashMap vs. Hashtable

Oba sta na Javi temelječi zbirki, ki se uporabljata za shranjevanje podatkov v pare ključ / vrednost. HashMap je implementacija zemljevida, ki temelji na hash tabeli, ki zagotavlja stalno zmogljivost za vstavljanje in lociranje parov. Učinkovitost je mogoče prilagoditi z uporabo konstruktorjev, ki omogočajo nastavitev zmogljivosti in faktorja obremenitve tabele hash. Osnovni Hashtable je precej podoben HashMap-u, celo navzdol po imenih metod. Hrani par ključ / vrednost v tabelo hash. V Hashtable podate predmet, ki ga je mogoče uporabiti kot ključ, in vrednost, ki gre skupaj s ključem.

  1. Sinhronizacija HashMap Vs. Hashtable

Tako HashMap kot Hashtable uporabljata tehniko prepiranja za shranjevanje vrednosti na podlagi ključa. Tako kot HashMap tudi Hashtable uporablja pare ključ / vrednost za shranjevanje vrednosti v hash tabelo. Ključna razlika med obema pa je sinhronizacija. HashMap je nesinhroniziran zemljevid, medtem ko je Hashtable sinhroniziran zemljevid. To pomeni, da HashMap ni varen za navoje in ga ni mogoče deliti med več niti brez ustrezne sinhronizacijske kode. Nasprotno, Hashtable je varen za navoje in ga lahko delite med več niti. Hashtable je hitrejši kot uporaba HashMap-a v sinhroniziranem ovoju, če morate uporabiti sinhronizirani zemljevid.

  1. Null tipke in null vrednosti za HashMap Vs. Hashtable

Razred HashMap zagotavlja izvedbo zemljevidov, ki temelji na strukturi podatkov Hashtable. Ta izvedba podpira vse operacije Zemljevida in omogoča več ničelnih vrednosti, vendar le eno ničelno tipko, tako da lahko ohranja edinstvene lastnosti ključa. Vendar ne jamči za vrstni red shranjevanja vnosov. Hashtable na drugi strani s pomočjo hash funkcije preslika ključe na vrednosti. Za razliko od HashMap-a, Hashtable ne podpira ničelnih vrednosti in null-tipk, ker je v izvedbi metode Hashtable metoda put null.

  1. Delovanje HashMap Vs. Hashtable

Ker HashMap ni sinhroniziran zemljevid, je glede na zmogljivosti veliko hitrejši in boljši od Hashtable-a in dejansko porabi manj pomnilnika kot Hashtable. Čeprav so praktično identični, je Hashtable nekoliko počasnejši od HashMap-a, vendar hitrejši od sinhroniziranega HashMap-a. Uporaba Hashtable-a z več-nitnim dostopom sama po sebi ni varna, ker so sinhronizirane samo metode. Hashtable je sinhroniziran primer HashMap-a. Ninhronizirani predmeti imajo boljše rezultate v primerjavi s sinhroniziranimi predmeti, tako kot Hashtable deluje bolje v enem samem niti.

HashMap vs. Hashtable: Primerjalna tabela

 

Povzetek HashMap Vs. Hashtable

Razred HashMap vam daje neortirani, neurejeni zemljevid. Ko torej potrebujete Zemljevid in vam ni vseeno, v kakšnem vrstnem redu so shranjeni vnosi, je HashMap pot.

Tako kot Vector je bil Hashtable že od pradavnine Java. Tako kot je Vector sinhroniziran protivir sodobnejšemu in naprednejšemu ArrayListu, je tudi Hashtable sinhroniziran primer HashMap-a. Vendar pa razreda ni mogoče sinhronizirati, zato ko rečemo, da je Hashtable sinhroniziran zemljevid, to pomeni, da so ključne metode razreda sinhronizirane. 

Medtem ko sta oba praktično identična, je razlika v tem, kako sta sinhronizirana in kako delujeta. HashMap ima boljše delovanje v več nitnih okoljih, medtem ko Hashtable deluje boljše v enem samem navoju.