Ответ
Произойдет перезапись значения для существующего ключа. Размер HashMap не изменится.
Механизм:
- Поиск ключа:
hashCode()(константа) → определение бакета. - В найденном бакете ключи сравниваются через
equals(). - При
equals() == trueстарое значение заменяется новым (даже если новое —null).
Пример:
class Key {
@Override
public int hashCode() { return 1; }
@Override
public boolean equals(Object obj) { return true; } // Все ключи равны
}
HashMap<Key, String> map = new HashMap<>();
Key k1 = new Key();
Key k2 = new Key();
map.put(k1, "First");
map.put(k2, null); // Перезаписывает "First" на null
// map.size() == 1
// map.get(k1) == null
Последствия: Константный hashCode() приводит к коллизиям всех ключей в одном бакете, катастрофически снижая производительность.