Sobes.tech
Junior — Middle

HashMapda turli kalitlar bir xil hash-kodga ega bo'lsa, qanday qilib to'qnashuvlar bilan kurashiladi?

sobes.tech AI

AIdan javob

Java'da HashMap'da xesh-kodlar bir xil bo'lsa, muammolarni hal qilish chaining (zanjir) yordamida amalga oshiriladi. Bu shuni anglatadiki, xesh-kodi bir xil bo'lgan barcha elementlar, bucket massivida bir xil indeksga olib keladigan, bog'langan ro'yxat yoki (Java 8 dan boshlab) daraxtda saqlanadi.

Agar zanjirdagi elementlar soni etarlicha katta bo'lsa (standartda 8 dan ortiq), bog'langan ro'yxat muvozanatli daraxtga (TreeNode) aylantiriladi, bu esa qidiruvning O(n) dan O(log n) ga yaxshilanishini ta'minlaydi.

Soddalashtirilgan qo'shish logikasining misoli:

int bucketIndex = hash(key) % table.length;
Node<K,V> head = table[bucketIndex];
// Kalit mavjudligini tekshirish
while (head != null) {
    if (head.key.equals(key)) {
        head.value = value; // qiymatni yangilash
        return;
    }
    head = head.next;
}
// Agar kalit mavjud bo'lmasa, yangi tugunni qo'shish
Node<K,V> newNode = new Node<>(key, value);
newNode.next = table[bucketIndex];
table[bucketIndex] = newNode;

Shu tarzda, HashMap muammolarni samarali hal qiladi va qabul qilinadigan ishlashni saqlab qoladi.