Ответ
Да, можно, но нужно переопределить методы 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 объекты будут сравниваться по ссылке, что может привести к неожиданному поведению. Также ключ должен быть иммутабельным, иначе изменение его полей сломает хеш-таблицу.