„Java“ kolekcijų sistema pateikia kolekcijos klasių rinkinį. Kiekviena klasė turi savo stipriąsias ir silpnąsias puses. Kai kuriose klasėse pateikiamos visos realizacijos, kuriomis galima naudotis kaip yra. Kiti yra abstraktūs, pateikiantys skeleto įgyvendinimą, kuris naudojamas kaip atskaitos taškas kuriant kolekcijas. Kolekcijos įgyvendinimams sinchronizuotų klasių teikimui naudojama sinchronizuoto apklijavimo sistema, kitaip diegimai nėra sinchronizuojami. Kelios klasės teikia žemėlapio sąsajos įgyvendinimą.

„Java“ platformoje yra trys bendrosios paskirties žemėlapių įgyvendinimai: „HashMap“, „TreeMap“ ir „LinkedHashMap“. „HashMap“ ir „Hashtable“ yra dvi „Java“ kolekcijos, naudojamos raktų / reikšmių poroms kaupti maišos lentelėje. „Hashtable“ yra sinchronizuotas žemėlapis, o „HashMap“ - nesinchronizuotas žemėlapis. Nepaisant to, jei jums reikia naudoti sinchronizuotą žemėlapį, „Hashtable“ yra greitesnis nei sinchronizuotame aplanke naudoti „HashMap“. Abi yra „Java“ maišos pagrindu sukurtos kolekcijos, tačiau jos turi nemažą skirtumų dalį. Pabrėžėme keletą pagrindinių skirtumų, kurie padės geriau suprasti terminus.

Kas yra „HashMap“?

„HashMap“ yra žemėlapio įgyvendinimas, pagrįstas maišos lentele, užtikrinančia pastovų veikimą poroms įterpti ir nustatyti. „HashMap“ klasė pateikia žemėlapio įgyvendinimą, pagrįstą „Hashtable“ duomenų struktūra. Šis diegimas palaiko visas žemėlapio operacijas ir leidžia naudoti kelias nulines reikšmes, bet tik vieną nulinį raktą. Vertėms kaupti maišos lentelėje naudojamos raktų / reikšmių poros. Tai yra nesinchronizuotas žemėlapis, kuris reiškia, kad jis nėra saugus sriegiams ir jo negalima dalintis keliais sriegiais be tinkamos sinchronizacijos.

Kas yra „Hashtable“?

Priešingai nei „HashMap“, „Hashtable“ yra sinchronizuotas žemėlapis ir yra saugus sriegiams, tai reiškia, kad juo galima dalytis keliais sriegiais. Skiltyje „Hashtable“ nurodote objektą, kuris gali būti naudojamas kaip raktas, ir reikšmę, kuri pridedama prie rakto. „Hashtable“ susieja reikšmių klavišus naudodamas maišos funkciją. „Java“ teikia šią funkciją kaip objekto maišos kodo () metodą, kurio klasės nepaisomos, kad būtų pateikti tinkami maišos kodai. Priešingai nei „HashMap“, „Hashtable“ nepalaiko null reikšmių ir null klavišų, nes „Hashtable“ Put metodo diegimo programoje yra null check.

Skirtumas tarp „HashMap“ ir „Hashtable“

  1. „HashMap Vs“ pagrindai Puikiai

Abi yra „Java“ maišos pagrindu sukurtos kolekcijos, naudojamos duomenims kaupti raktų / reikšmių poromis. „HashMap“ yra žemėlapio įgyvendinimas, pagrįstas maišos lentele, užtikrinančia pastovų veikimą poroms įterpti ir nustatyti. Našumą galima reguliuoti naudojant konstruktorius, kurie leidžia nustatyti maišos lentelės talpą ir apkrovos koeficientą. Pagrindinis „Hashtable“ yra gana panašus į „HashMap“, net ir metodų pavadinimus. Jame kaupiama raktų / reikšmių pora maišos lentelėje. Skiltyje „Hashtable“ nurodote objektą, kuris gali būti naudojamas kaip raktas, ir reikšmę, kuri pridedama prie rakto.

  1. „HashMap Vs“ sinchronizavimas Puikiai

Tiek „HashMap“, tiek ir „Hashtable“ naudoja maišos metodus, kad saugotų reikšmes pagal raktą. Kaip ir „HashMap“, „Hashtable“ naudoja raktų / reikšmių poras vertybėms kaupti maišos lentelėje. Tačiau pagrindinis skirtumas tarp šių dviejų yra sinchronizavimas. „HashMap“ yra nesinchronizuotas žemėlapis, o „Hashtable“ yra sinchronizuotas žemėlapis. Tai reiškia, kad „HashMap“ nėra saugaus sriegio ir negali būti dalijamasi tarp kelių gijų be tinkamo sinchronizacijos kodo. Priešingai, „Hashtable“ yra nenaudojama gijų ir gali būti dalijama tarp kelių gijų. „Hashtable“ yra greitesnis nei naudojant „HashMap“ sinchronizuotame įvynioklyje, jei reikia naudoti sinchronizuotą žemėlapį.

  1. „HashMap Vs“ niekiniai raktai ir nulinės vertės. Puikiai

„HashMap“ klasė pateikia žemėlapio įgyvendinimą, pagrįstą „Hashtable“ duomenų struktūra. Šis diegimas palaiko visas žemėlapio operacijas ir leidžia naudoti kelias nulines reikšmes, bet tik vieną nulinį raktą, kad jis galėtų išlaikyti unikalias rakto savybes. Tačiau tai negarantuoja įrašų saugojimo tvarkos. Kita vertus, „Hashtable“ suskirsto raktus į reikšmes naudodamas maišos funkciją. Priešingai nei „HashMap“, „Hashtable“ nepalaiko null reikšmių ir null klavišų, nes „Hashtable“ Put metodo diegimo programoje yra null check.

  1. „HashMap Vs“ atlikimas Puikiai

Kadangi „HashMap“ nėra sinchronizuotas žemėlapis, jis yra daug greitesnis ir geresnis už „Hashtable“ našumo atžvilgiu ir iš tikrųjų sunaudoja mažiau atminties nei „Hashtable“. Nors jie yra beveik identiški, „Hashtable“ yra šiek tiek lėtesnis nei „HashMap“, bet greitesnis nei sinchronizuotas „HashMap“. Iš esmės nėra saugu naudoti „Hashtable“ su kelių sriegių prieiga, nes sinchronizuojami tik metodai. „Hashtable“ yra sinchronizuotas „HashMap“ atitikmuo. Nesinchronizuoti objektai veikia geriau, palyginti su sinchronizuotais objektais, kaip ir „Hashtable“ geriau veikia vienoje srieginėje aplinkoje.

„HashMap“ ir „Hashtable“: palyginimo diagrama

„HashMap Vs.“ santrauka Puikiai

„HashMap“ klasėje pateikiamas nerūšiuotas, netvarkingas žemėlapis. Taigi, kai jums reikia žemėlapio, o jums nerūpi įrašų saugojimo tvarka, tada reikia pasirinkti „HashMap“.

„Hashtable“, kaip ir „Vector“, buvo nuo priešistorinių „Java“ laikų. Kaip „Vector“ yra sinchronizuotas modernesnio ir pažangesnio „ArrayList“ atitikmuo, „Hashtable“ yra sinchronizuotas „HashMap“ atitikmuo. Tačiau klasės negalima sinchronizuoti, todėl kai sakome, kad „Hashtable“ yra sinchronizuotas žemėlapis, tai reiškia, kad pagrindiniai klasės metodai yra sinchronizuojami.

Nors abu yra beveik vienodi, skirtumas yra tas, kaip jie sinchronizuojami ir kaip jie veikia. „HashMap“ geriau veikia kelių sriegių aplinkoje, o „Hashtable“ geriau veikia vienoje sriegių aplinkoje.

Nuorodos

  • Vaizdo kreditas: https://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Java.util.Map_hierarchy.svg/2000px-Java.util.Map_hierarchy.svg.png
  • Vaizdo kreditas: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg/500px-Hash_table_5_0_1_1_1_1_1_LL.svg.png
  • Siera, Katherine. Viskas viename „Java“ 2. Naujasis Delis: „Dreamtech Press“, 2003. Spausdinti
  • Friesenas, Jeffas. Pradžia Java 7. NYC: „Apress“, 2012. Spausdinti
  • Širazi, Džekas. „Java Performance Tuning“. Sebastopolis, Kalifornija: „O'Reilly Media“, 2003. Spausdinti
  • Eklelis, Bruce'as. Mintys Java. Naujasis Džersis: „Prentice Hall“, 2003. Spausdinti