Junior — Middle
Ի՞նչ է տեղի ունենում HashMap-ի ներսում, երբ ավելացվում է նոր բանալի-արժեք զույգ։
sobes.tech AI
Պատասխան AI-ից
Երբ HashMap-ում ավելացվում է նոր բանալի-արժեք զույգ, տեղի է ունենում հետևյալը:
- Կանաչի
hashCode()մեթոդի միջոցով հաշվարկվում է բանալիի հեշ կոդը: - Հեշ կոդը փոխարկվում է զանգվածի ինդեքսի (backend HashMap — բաքերի զանգված) միջոցով, օրինակ, զանգվածի չափով մնացորդ կամ բիթային մասկով:
- Եթե այդ ինդեքսի բաքում չկան տարրեր, ստեղծվում է նոր գրառում բանալիով և արժեքով:
- Եթե բաքը արդեն պարունակում է տարրեր (կոլիզիա), անցնում է շղթայով (կապակցված ցանկ կամ ծառ, եթե շատ տարրեր կան)՝ ստուգելու համար, արդյոք այդ բանալին արդեն կա:
- Եթե բանալին գտնվի, արժեքը թարմացվում է:
- Եթե բանալին չկա, նոր գրառում ավելացվում է շղթայում:
- Երբ լցվածության որոշակի շեմը (load factor) հասնում է, զանգվածը ընդլայնվում է և տարրերը նորից բաշխվում (rehash):
Օրինակ:
Map<String, Integer> map = new HashMap<>();
map.put("apple", 5); // Հաշվարկվում է hash("apple"), որոշվում է ինդեքսը, ավելացվում է գրառումը