Ответ
Нет, не может. HashMap реализует интерфейс Map, который гарантирует уникальность ключей. При попытке вставить запись с ключом, который уже присутствует в мапе, новое значение заменит старое.
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("apple", 3); // Ключ "apple" уже существует - значение заменяется на 3
System.out.println(map); // {apple=3, banana=2}
System.out.println(map.size()); // 2 (не 3!)
Как это работает:
- Ключи должны быть уникальными, так как хэш-код ключа определяет «корзину» (bucket) для размещения пары ключ-значение.
- При коллизии хэшей (когда разные ключи дают одинаковый индекс корзины) элементы хранятся в одной корзине как связанный список или дерево (в Java 8+ при большом количестве коллизий), но сами ключи при этом остаются разными объектами (проверка через
equals()).