Sobes.tech
Junior — Middle

HashMapте ар кандай ачкычтар бирдей хэш-кодго ээ болгондо кросс-иштетүү кандай ишке ашырылат?

sobes.tech AI

AIден жооп

Javaда HashMapтеги кагаздарда, эгер хеш-коддор бирдей болсо, алар chaining (зылгак) аркылуу ишке ашырылат. Бул деген, хеш-коду бирдей болгон бардык элементтер, bucket массивиндеги бирдей индекске алып келгенде, ошол bucketте байланышкан тизме же дарак (Java 8ден баштап) түрүндө сакталат.

Эгер зылгактагы элементтердин саны жетиштүү чоң болсо (өзгөчө 8ден ашык), байланышкан тизме балансталган даракка (TreeNode) айланат, бул издөө ылдамдыгын O(n)дон O(log n)го жакшыртат.

Жөнөкөй кошуу логикасынын мисалы:

int bucketIndex = hash(key) % table.length;
Node<K,V> head = table[bucketIndex];
// Ключ бар экенин текшерүү
while (head != null) {
    if (head.key.equals(key)) {
        head.value = value; // маанини жаңыртуу
        return;
    }
    head = head.next;
}
// Эгер ключ жок болсо, жаңы түйүндү кошуу
Node<K,V> newNode = new Node<>(key, value);
newNode.next = table[bucketIndex];
table[bucketIndex] = newNode;

Мындайча айтканда, HashMap натыйжалуу кагаздар менен иштейт жана кабыл алынган иштөө ылдамдыгын сактайт.