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.