Ответ
Переопределение equals и hashCode необходимо для корректной работы объектов в коллекциях, таких как HashSet, HashMap и других, основанных на хешировании.
Правила:
- Если
equalsвозвращаетtrue, тоhashCodeдолжен быть одинаковым. - Если
hashCodeразный,equalsдолжен вернутьfalse.
Пример:
data class Person(val name: String, val age: Int) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Person) return false
return name == other.name && age == other.age
}
override fun hashCode(): Int {
return 31 * name.hashCode() + age
}
}
Если не переопределить эти методы, коллекции могут работать некорректно (например, дублирование в HashSet).