Sobes.tech
Junior — Middle

Miks Kotlinis ülekirjutatakse hashCode meetod universaalsetele objektidele?

sobes.tech AI

Vastus AI-lt

Kotlinis on hashCode meetod üle kirjutatud üldistele objektidele, et tagada korrektne toimimine hash-põhiste andmestruktuuridega, nagu HashMap või HashSet. Vaikimisi võib hashCode põhineda objekti mäluaadressil, mis ei sobi, kui loogiliselt võrdsed objektid peaksid omama sama hash-koodi.

hashCode ja equals ühiselt üle kirjutades tagatakse, et võrdsed objektid omavad sama hash-koodi, mis on oluline õige otsingu, sisestamise ja kustutamise jaoks kogumikes.

Näide üle kirjutamisest data class'is (Kotlin genereerib automaatselt equals ja hashCode):

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

Kui klass ei ole data, tuleb see käsitsi üle kirjutada:

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()
}