Sobes.tech
Junior — Middle

HashMap ga bir xil hash-kodiga ega, ammo equals bo'yicha turli qiymatlarga ega ikkita kalit qo'shsangiz nima bo'ladi?

sobes.tech AI

AIdan javob

Java'da HashMap'da kalitlar hash-kodiga ko'ra indekslangan bucketlarga saqlanadi. Agar ikki kalit bir xil hash-kodga ega bo'lsa, ular bir xil bucketa tushadi, lekin noyobligini aniqlash uchun equals metodi ishlatiladi.

Agar siz ikkita hash-kodi bir xil bo'lgan, lekin equals bo'yicha teng bo'lmagan kalitlarni qo'shsangiz, HashMap ikkala kalitni ham bir xil bucketda turli yozuvlar sifatida saqlaydi.

Misol:

Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, lekin !key1.equals(key2)

map.put(key1, "value1");
map.put(key2, "value2");

System.out.println(map.size()); // 2

Shunday qilib, bir xil hash-kod bir xil kalitlar degani emas. HashMap avval hash bo'yicha bucketni qidiradi, so'ngra equals yordamida kalitlarni solishtiradi. Agar equals false bo'lsa, kalit yangi hisoblanadi va kolleksiyaga qo'shiladi.