Sobes.tech
Junior — Middle

Ի՞նչ է տեղի ունենում HashMap-ի ներսում, երբ ավելացվում է նոր բանալի-արժեք զույգ։

sobes.tech AI

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

Երբ HashMap-ում ավելացվում է նոր բանալի-արժեք զույգ, տեղի է ունենում հետևյալը:

  1. Կանաչի hashCode() մեթոդի միջոցով հաշվարկվում է բանալիի հեշ կոդը:
  2. Հեշ կոդը փոխարկվում է զանգվածի ինդեքսի (backend HashMap — բաքերի զանգված) միջոցով, օրինակ, զանգվածի չափով մնացորդ կամ բիթային մասկով:
  3. Եթե այդ ինդեքսի բաքում չկան տարրեր, ստեղծվում է նոր գրառում բանալիով և արժեքով:
  4. Եթե բաքը արդեն պարունակում է տարրեր (կոլիզիա), անցնում է շղթայով (կապակցված ցանկ կամ ծառ, եթե շատ տարրեր կան)՝ ստուգելու համար, արդյոք այդ բանալին արդեն կա:
    • Եթե բանալին գտնվի, արժեքը թարմացվում է:
    • Եթե բանալին չկա, նոր գրառում ավելացվում է շղթայում:
  5. Երբ լցվածության որոշակի շեմը (load factor) հասնում է, զանգվածը ընդլայնվում է և տարրերը նորից բաշխվում (rehash):

Օրինակ:

Map<String, Integer> map = new HashMap<>();
map.put("apple", 5); // Հաշվարկվում է hash("apple"), որոշվում է ինդեքսը, ավելացվում է գրառումը