Sobes.tech
Junior — Middle

Ինչպե՞ս է իրականացվում նույն հեշ-արժեքով տարրերի կազմակերպումը HashMap-ի ներսում։

sobes.tech AI

Պատասխան AI-ից

Java-ում, նույն հեշ արժեքով (կողմնակալություններ) տարրերը կազմակերպված են կապակցված ցանկի տեսքով կամ, Java 8-ից սկսած, հավասարակշռված ծառի (TreeNode) տեսքով, երբ շատ կողմնակալություններ են։

Երբ մի քանի բանալիներ ունեն նույն հեշ կոդը, դրանք տեղադրվում են մեկ «խցիկում» (bucket): Սկզբում բոլոր տարրերը կապված են պարզ կապակցված ցանկով: Եթե մեկ «խցիկում» տարրերի թիվը գերազանցում է որոշակի շեմը (հաճախ 8), ցանկը փոխարկվում է կարմրո-սև ծառի՝ որոնման արդյունավետությունը բարձրացնելու համար:

Պարզեցված կառուցվածքի օրինակ՝

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

Այսպիսով, կողմնակալությունների դեպքում, HashMap նախ որոնում է տարրն ցանկում կամ ծառում ըստ բանալիի, համեմատելով բանալիները equals() մեթոդով։