Junior — Middle
Ҳангоми илова кардани калиди нав-арзиши нав дар HashMap, чӣ рӯй медиҳад?
sobes.tech AI
Ҷавоб аз AI
Ҳашмапга янги калит-ҳадис пари қўшилганда, қуйидагилар бўлади:
- Калитнинг
hashCode()усули ёрдамида хеш-код ҳисобланади. - Хеш-код массив индексига айлантирилади (backend HashMap — bucketлар массиви) масалан, массив ўлчамининг қолоқ ёки бит маскаси орқали.
- Агар бу индекстаги bucketда элементлар бўлмаса, янги ёзув калит ва қиймат билан яратилади.
- Агар bucketда аллақачон элементлар бўлса (коллизия), занжир (бирлашган рўйхат ёки дарахт, агар кўп элементлар бўлса) орқали ўтилган ҳолда, ушбу калит аллақачон мавжуд ёки йўқлиги текширилади:
- Агар калит топилса, қиймат янгиланади.
- Агар калит топилмаса, янги ёзув занжирга қўшилади.
- Белгиланган юкланиш фоизи (load factor) етиб, массив кенгайтирилади ва элементлар қайта тақсимланади (rehash).
Масалан:
Map<String, Integer> map = new HashMap<>();
map.put("apple", 5); // hash("apple") ҳисобланади, индекс белгиланади, ёзув қўшилади