Может ли HashMap в Java содержать два элемента с одинаковым ключом?

«Может ли HashMap в Java содержать два элемента с одинаковым ключом?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не может. 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!)

Как это работает:

  1. Ключи должны быть уникальными, так как хэш-код ключа определяет «корзину» (bucket) для размещения пары ключ-значение.
  2. При коллизии хэшей (когда разные ключи дают одинаковый индекс корзины) элементы хранятся в одной корзине как связанный список или дерево (в Java 8+ при большом количестве коллизий), но сами ключи при этом остаются разными объектами (проверка через equals()).