„Java“ kolekcijų sistema pateikia rinkinių 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į. Mes pabrėžiame keletą pagrindinių skirtumų, kurie padėtų jums geriau suprasti terminus.
„HashMap“ yra žemėlapio įgyvendinimas, pagrįstas maišos lentele, užtikrinantis nuolatinį veikimą poroms įterpti ir nustatyti. „HashMap“ klasė teikia žemėlapio įgyvendinimą, pagrįstą „Hashtable“ duomenų struktūra. Šis įgyvendinimas 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 nesinchronizuotas žemėlapis, kuris reiškia, kad jis nėra apsaugotas nuo gijų ir negali būti bendrai naudojamas keliems gijams be tinkamos sinchronizacijos..
Skirtingai nuo „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ą objekto maišos kodo () metodo pavidalu, 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 įgyvendinime yra negaliojančios patikros..
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žtikrinantis nuolatinį 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.
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į.
„HashMap“ klasė teikia ž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 įgyvendinime yra negaliojančios patikros..
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“ klasėje pateikiamas nerūšiuotas, netvarkingas žemėlapis. Taigi, kai jums reikia žemėlapio, o jums nerūpi įrašų saugojimo tvarka, tada „HashMap“ yra kelias.
„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 iš esmės identiški, skirtumas yra tas, kaip jie sinchronizuojami ir kaip jie veikia. „HashMap“ geriau veikia kelių sriegių aplinkoje, o „Hashtable“ geriau veikia vienoje sriegių aplinkoje.