Почему хэш-код может повторяться у разных объектов?

«Почему хэш-код может повторяться у разных объектов?» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хэш-код может повторяться у разных объектов из-за ограниченного диапазона значений (например, в Java int от -2³¹ до 2³¹-1). Это называется коллизией. Хороший хэш-алгоритм минимизирует коллизии, но не исключает их полностью.

Пример в Java:

String a = "FB";
String b = "Ea";
System.out.println(a.hashCode()); // 2236
System.out.println(b.hashCode()); // 2236

Здесь строки разные, но хэш совпадает.

Важно:

  • Равные объекты обязаны иметь одинаковый хэш-код.
  • Разные объекты могут иметь одинаковый хэш-код.
  • Коллизии ухудшают производительность хэш-коллекций (HashMap, HashSet).