Junior — Middle
Java'da HashMap ning tuzilishi va xulqiga kalitni o'zgartirish qanday ta'sir qiladi?
sobes.tech AI
AIdan javob
HashMap ichki kalitlarining hash-kodi hisoblanadi va elementning ichki tuzilmasidagi (bucket) joylashuvini aniqlash uchun ishlatiladi. Agar kalit sifatida ishlatiladigan ob'ekt uning hash-kodi yoki equals() metodining natijasini o'zgartirsa, bu HashMap ish faoliyatini buzadi.
Nima uchun?
- Element qo'shilganda, kalit hash qilinadi va element ma'lum bir bucketga joylashtiriladi.
- Elementni kalit bo'yicha qidirishda,
HashMaphashni hisoblaydi va mos bucketda qidiradi.
Agar kalit qo'shilgandan so'ng o'zgartirilsa, yangi holatda hisoblangan hash boshqacha bo'ladi va element topilmaydi — u "yo'qoladi" xaritadan.
Shuning uchun, HashMap ichidagi kalitlar o'zgarmas (immutable) bo'lishi yoki ular kalit sifatida ishlatilganda o'zgarmasligi kerak.
Muammo misoli:
class Key {
int id;
Key(int id) { this.id = id; }
public int hashCode() { return id; }
public boolean equals(Object o) { return o instanceof Key && ((Key)o).id == id; }
}
Key key = new Key(1);
HashMap<Key, String> map = new HashMap<>();
map.put(key, "value");
key.id = 2; // kalit o'zgartirildi
System.out.println(map.get(key)); // null, chunki kalit "yo'qolgan"