Можно ли использовать иммутабельный объект отличный от строки в качестве ключа

«Можно ли использовать иммутабельный объект отличный от строки в качестве ключа» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно, но нужно переопределить методы equals() и hashCode() для корректной работы. Например, для HashMap ключ должен правильно вычислять хеш и сравниваться.

data class User(val id: Int, val name: String) // data class автоматически переопределяет equals/hashCode

val map = HashMap<User, String>()
val user = User(1, "Alice")
map[user] = "Admin"
println(map[user]) // "Admin"  

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