Junior — Middle
Ի՞նչ կլինի, եթե HashMap-ում երկու բանալի տեղադրեք նույն hash-կոդով, բայց տարբեր արժեքներով ըստ equals-ի։
sobes.tech AI
Պատասխան AI-ից
Java-յի HashMap-ում բանալիները պահվում են bucket-ներում, որոնք ինդեքսավորվում են hash-կոդով: Եթե երկու բանալիներ ունեն նույն hash-կոդը, նրանք ընկնում են նույն bucket-ում, բայց անսահմանության որոշման համար օգտագործվում է equals մեթոդը:
Եթե երկու բանալիներ նույն hash-կոդով են, բայց equals-ով չեն համընկնում, HashMap-ը պահում է երկու բանալիները որպես տարբեր գրառումներ նույն bucket-ում:
Օրինակ՝
Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, բայց !key1.equals(key2)
map.put(key1, "value1");
map.put(key2, "value2");
System.out.println(map.size()); // 2
Այսպիսով, նույն hash-կոդը չի նշանակում նույն բանալիներ: HashMap-ը նախ որոնում է hash-ով bucket-ում, ապա համեմատում է բանալիները equals-ով: Եթե equals-ը վերադարձնի false, բանալին համարվում է նոր և ավելացվում է հավաքածուին։