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() մեթոդով։