Sobes.tech
Junior — Middle

Használható-e módosítható tulajdonságokkal rendelkező adat osztály kulcsként egy hash-táblában?

sobes.tech MI

Válasz az MI-től

Nem ajánlott olyan adatsorozat osztályt használni, amely módosítható tulajdonságokkal rendelkezik, mint kulcsot egy hash-táblában. A hash-táblák kulcsainak változatlannak kell lenniük, mert az objektum tulajdonságainak módosítása, amelyek részt vesznek a hash-kód vagy az összehasonlítás számításában, a hozzáférés elvesztéséhez vezethet az elemhez.

Például, ha a data osztály egyik tulajdonsága megváltozik, amely befolyásolja a hashCode vagy az equals értékét, az objektum már nem lesz megtalálható a hash-táblában:

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

val map = hashMapOf<User, String>()
val user = User(1, "Alice")
map[user] = "Developer"

user.name = "Bob" // Tulajdonság módosítása

println(map[user]) // null értéket adhat, mivel a hashCode megváltozott

Ezért jobb, ha változatlan objektumokat vagy változatlan tulajdonságokkal rendelkező kulcsokat használunk.