Ответ
Использовать data class с изменяемым полем в качестве ключа HashMap не рекомендуется, но технически возможно. Проблема в том, что hashCode() и equals() зависят от значений полей. Если изменить поле после добавления в HashMap, ключ потеряется.
data class Key(var id: Int)
fun main() {
val map = HashMap<Key, String>()
val key = Key(1)
map[key] = "Value"
key.id = 2 // Изменяем поле
println(map[key]) // null - ключ "потерялся"
}
Решение:
- Сделать поля
val(неизменяемыми) - Использовать неизменяемые структуры (например,
Pair,Triple) - Переопределить
hashCode()/equals(), но это усложнит код и может привести к ошибкам.
Лучше избегать изменяемых ключей в HashMap.