Junior — Middle
Тавзеҳ диҳед, ки чӣ маъно дорад, ки дар сохтори додаҳои HashMap даргирии калидҳо ва чӣ гуна бо он мубориза мебарад.
sobes.tech AI
Ҷавоб аз AI
Дархости калид (hash collision) дар HashMap рух медиҳад, вақте ки ду калиди гуногун ҳангоми ҳисоб кардани функсияи хеш арзиши индексро барои нигоҳдорӣ дар массив медиҳанд.
Чӣ гуна HashMap бо ин кор мекунад:
- Дар Java, HashMap аз занҷирҳо (листҳои пайвастшуда ё дарахтони мувозинатёфта) барои нигоҳ доштани чанд элемент, ки ба як бунк ёфтанд, истифода мебарад.
- Вақте ки элемент нав бо калид, ки хеши он бо мавҷуда мувофиқат мекунад, илова карда мешавад, элемент нав ба занҷири он бунк илова мешавад.
- Вақте ки калидро ҷустуҷӯ мекунед, HashMap элементҳоро дар занҷир мегузарад ва калидҳоро бо методи equals() муқоиса мекунад, то ки калиди дурустро пайдо кунад.
Аз Java 8, агар занҷир хеле дароз шавад, он ба дарахти мувозинатёфта (TreeNode) табдил дода мешавад, ки иҷрои ҷустуҷӯро аз O(n) ба O(log n) беҳтар мекунад.