Sobes.tech
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, բանալին համարվում է նոր և ավելացվում է հավաքածուին։