Junior — Middle
Какво ще се случи, ако в HashMap добавите два ключа с еднакъв хеш код, но различни стойности по equals?
sobes.tech AI
Отговор от AI
В HashMap в Java ключовете се съхраняват в кофи, индексирани по хеш-код. Ако два ключа имат еднакъв хеш-код, те попадат в една и съща кофа, но за определяне на уникалността се използва методът equals.
Ако добавите два ключа с еднакъв хеш-код, но които не са равни по equals, HashMap ще запази и двата ключа като различни записи в една и съща кофа.
Пример:
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
Така, еднакъв хеш-код не означава еднакви ключове. HashMap първо търси в кофата по хеш, а след това сравнява ключовете чрез equals. Ако equals върне false, ключът се счита за нов и се добавя към колекцията.