Duomenų struktūra, kuri naudoja maišos funkciją, kad atitiktų identifikavimo reikšmes, vadinamas raktais, su susijusiomis reikšmėmis.

„Hash“ žemėlapis (arba „hash“ lentelė) yra duomenų struktūra, kurioje yra raktų vertės poros ir leidžia išskirti reikšmes pagal raktą.

Patraukliausia funkcija - greitai ieškoti daiktų, ypač daugeliui elementų. Hash kortelės veikia naudodamos hash funkciją, kad konvertuotų raktus į maišos numerį, kuris vėliau naudojamas kaip indeksas į „kibirų“ masyvą, kuriame yra vienas ar daugiau elementų. Tai leidžia jums naudoti nuolatinę prieigą prie atitinkamo kibiro, o tada - tiesinę ieškomo elemento paiešką kauše. Kai elementų skaičius kiekvienoje kibiroje išlieka žemas (galbūt dinamiškai keičiant kibirų masyvo dydį įterpiant elementus), tai užtikrina pastovią laiko paiešką vidutiniškai, net jei elementų skaičius maišos žemėlapyje padidėja. Tai gali būti reikšmingas pranašumas, palyginti su ieškojimu medžių struktūroje, o elementų skaičiui didinti reikia daugiau žingsnių.

Skirtingų stalų trūkumas yra tas, kad elementai nėra saugomi akivaizdžiai ar prasmingai, nes gera maišos funkcija nerodys gretimų raktų gretimose kibirose.

Jei HashMap egzemplioriuje turi būti saugomi daug atvejų, kuriant jį pakankamai dideliu pajėgumu, duomenys bus efektyviau išsaugoti nei leisti atlikti automatinį pervardymą, jei tai būtina stalo augimui.

Atminkite, kad šis įgyvendinimas nėra sinchronizuotas. Jei tuo pačiu metu prie kelio žemėlapio pasiekia keli siūlai ir bent vienas iš sriegių struktūrą keičia, ji turi būti sinchronizuota iš išorės. (Struktūrinis pakeitimas - tai bet kokia operacija, kuri prideda arba pašalina vieną ar daugiau žemėlapių; paprasčiausiai keičiant reikšmę, susijusią su raktu, kuriame jau yra egzempliorius, nėra struktūrinis pakeitimas.) Tai paprastai daroma sinchronizuojant objektą, kuris natūraliai Jei toks objektas neegzistuoja, žemėlapis turi būti suvyniotas naudojant „Kolekcijos“ sinchronizuoto žemėlapio metodą. Tai geriausia padaryti kuriant kūrinį, kad būtų išvengta atsitiktinio nesinchronizuotos prieigos prie žemėlapio:

 Map m = Collections.synchronizedMap(new HashMap(...)); 

Iteratoriai, grąžinami visais šiais metodais "rinkimo naršymo metodai", yra nestabilūs: jei žemėlapis bet kuriuo metu po iteratoriaus pakeitimų yra struktūriškai modifikuotas, bet kuriuo atveju, išskyrus iteratoriaus ištrynimo metodą, iteratorius bus ConcurrentModificationException išimtis, todėl, tuo pačiu metu keičiant iteratorių, greitai ir švariai, ir nerizikuojant savavališko, nek deterministinio elgesio neribotą laiką ateityje.

Atkreipkite dėmesį, kad saugaus iteratoriaus elgesio negalima garantuoti, nes apskritai neįmanoma pateikti jokių rimtų garantijų, kai lygiagrečiai keičiamos sinchronizuotos. Nekontroliuojami iteratoriai išmeta ConcurrentModificationException su maksimaliu efektyvumu. Todėl būtų neteisinga parašyti programą, kuri priklauso nuo šios išimties dėl jos teisingumo: iteratorių klaidų tolerantiškas elgesys turėtų būti naudojamas tik klaidoms aptikti.

Ši klasė yra „Java Collection“ sistemos narė.

Oficialūs dokumentai: https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

Stackoverflow nuoroda: ngn-wiki.ru.site/questions/34 / ...