Ответ
hashCode() определяет, в какую "корзину" (bucket) попадет объект в HashMap или HashSet. Если хеш-коды разные, объекты считаются разными ключами. Если хеш-коды совпадают, вызывается equals() для точного сравнения.
Контракт:
- Если
equals()вернулtrue,hashCode()должен быть одинаковым. - Обратное не обязательно: разные объекты могут иметь одинаковый
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. Лучше использовать иммутабельные данные.