Как hashCode отвечает за ключ

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

Ответ

hashCode() определяет, в какую "корзину" (bucket) попадет объект в HashMap или HashSet. Если хеш-коды разные, объекты считаются разными ключами. Если хеш-коды совпадают, вызывается equals() для точного сравнения.

Контракт:

  1. Если equals() вернул true, hashCode() должен быть одинаковым.
  2. Обратное не обязательно: разные объекты могут иметь одинаковый hashCode() (коллизия).

Пример:

data class User(val id: Int, val name: String) // hashCode() и equals() генерируются автоматически

val map = HashMap<User, String>()
map[User(1, "Alice")] = "Admin" // hashCode() определяет bucket

Важно: Изменяемые поля в hashCode() приводят к потере ключа в HashMap. Лучше использовать иммутабельные данные.