Sobes.tech
Back to questions
Junior — Middle
69

Зачем в Kotlin переопределяют метод hashCode для универсальных объектов?

Companies where asked
Технократия

Answer from AI

sobes.tech AI

В Kotlin метод hashCode переопределяют для универсальных объектов, чтобы обеспечить корректную работу с хэш-структурами данных, такими как HashMap или HashSet. По умолчанию hashCode может быть основан на адресе объекта в памяти, что не подходит, если логически равные объекты должны иметь одинаковый хэш.

Переопределение hashCode вместе с equals гарантирует, что объекты, считающиеся равными, будут иметь одинаковый хэш-код, что важно для корректного поиска, вставки и удаления в коллекциях.

Пример переопределения в data class (Kotlin генерирует equals и hashCode автоматически):

data class User(val id: Int, val name: String)

Если класс не data, то нужно переопределить вручную:

override fun equals(other: Any?): Boolean {
    if (this === other) return true
    if (other !is User) return false
    return id == other.id && name == other.name
}

override fun hashCode(): Int {
    return 31 * id + name.hashCode()
}