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.