Могут ли возникать коллизии при использовании hashcode()

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

Ответ

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

Пример:

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

Для корректной работы с коллекциями (например, HashMap) важно:

  1. Переопределять hashCode() вместе с equals()
  2. Обеспечивать согласованность: если a.equals(b) == true, то a.hashCode() == b.hashCode()

Коллизии снижают производительность хэш-коллекций, но не нарушают их работу, так как используется цепочка элементов с одинаковым хэшом.