Sobes.tech
Junior — Middle

Hogyan valósul meg az elemek szervezése ugyanazzal a hash-kóddal a HashMap-ben?

sobes.tech MI

Válasz az MI-től

Java-ban a HashMap elemei, amelyek ugyanazzal a hash-kóddal rendelkeznek (ütközések), láncolt listaként vagy, Java 8-tól kezdve, kiegyensúlyozott fákként (TreeNode) vannak szervezve, ha sok ütközés fordul elő.

Amikor több kulcs ugyanazt a hash-kódot kapja, egy "kád" (bucket) alá kerülnek. Kezdetben minden elem a kádon belül egy egyszerű láncolt listával van összekötve. Ha egy kádon belüli elemek száma meghalad egy bizonyos küszöbértéket (általában 8), a listát vörös-fekete fára alakítják át a keresés hatékonyságának növelése érdekében.

Egyszerűsített szerkezet példája:

static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;
    final K key;
    V value;
    Node<K,V> next;
    // ...
}

Így ütközés esetén a HashMap először a listában vagy a fában keresi meg az elemet a kulcs alapján, azokat az equals() metódussal összehasonlítva.