Sobes.tech
Junior — Middle

Mi történik, ha két kulcsot helyezünk el egy HashMap-be ugyanazzal a hash-kóddal, de különböző equals értékekkel?

sobes.tech MI

Válasz az MI-től

Java-ban a HashMap-ben a kulcsokat a hash-kód szerint indexelt buckettekben tárolják. Ha két kulcs ugyanazzal a hash-kóddal rendelkezik, ugyanabba a buckettbe kerülnek, de az egyediséget az equals metódus határozza meg.

Ha két olyan kulcsot szúrunk be, amelyek ugyanazzal a hash-kóddal rendelkeznek, de az equals szerint nem egyenlőek, a HashMap mindkét kulcsot külön rekordként tárolja ugyanabban a buckettben.

Példa:

Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, de !key1.equals(key2)

map.put(key1, "value1");
map.put(key2, "value2");

System.out.println(map.size()); // 2

Tehát ugyanaz a hash-kód nem jelenti ugyanazokat a kulcsokat. A HashMap először a hash alapján keresi a buckettet, majd az equals segítségével hasonlítja össze a kulcsokat. Ha az equals hamisat ad vissza, a kulcsot újnak tekinti, és hozzáadja a kollekcióhoz.