Могут ли разные объекты иметь одинаковое значение hashCode

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

Ответ

Да, могут. В Java/Котлине hashCode() возвращает int, а количество возможных хэш-кодов ограничено (2^32), тогда как количество объектов потенциально бесконечно. Это называется коллизией хэш-кодов.

Пример:

val str1 = "Aa"
val str2 = "BB"
println(str1.hashCode()) // 2112
println(str2.hashCode()) // 2112

Важно: при переопределении hashCode() нужно соблюдать контракт:

  1. Если a.equals(b) == true, то a.hashCode() == b.hashCode()
  2. Обратное не обязательно - разные объекты могут иметь одинаковый хэш