Junior — Middle
Kas notiks, ja HashMap ievieto divus atslēgas ar vienādu hash kodu, bet dažādām vērtībām pēc equals?
sobes.tech AI
Atbilde no AI
Java HashMap, atslēgas tiek glabātas bucketa, kas indeksēts pēc hash koda. Ja divas atslēgas ir ar vienādu hash kodu, tās nonāk tajā pašā bucketā, bet, lai noteiktu unikālitāti, tiek izmantota metode equals.
Ja ievieto divas atslēgas ar vienādu hash kodu, bet kas nav vienādas pēc equals, HashMap saglabās abas atslēgas kā dažādus ierakstus tajā pašā bucketā.
Piemērs:
Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, bet !key1.equals(key2)
map.put(key1, "value1");
map.put(key2, "value2");
System.out.println(map.size()); // 2
Tādējādi, tas pats hash kods nenozīmē vienādus atslēgas. HashMap vispirms meklē bucket pēc hash, tad salīdzina atslēgas ar equals. Ja equals atgriež false, atslēga tiek uzskatīta par jaunu un pievienota kolekcijai.