Junior — Middle
Hogyan befolyásolja a kulcs módosítása a HashMap szerkezetét és viselkedését Java-ban?
sobes.tech MI
Válasz az MI-től
A HashMap-ben a kulcsokat a hash-kód kiszámítására és az elem helyének meghatározására használják a belső struktúrában (bucket). Ha a kulcsként használt objektumot úgy módosítják, hogy megváltozik a hash-kódja vagy az equals() metódus eredménye, az megzavarja a HashMap működését.
Miért?
- Elem hozzáadásakor a kulcs hash-elésre kerül, és az elem egy adott bucketbe kerül.
- Elem keresésekor a
HashMapkiszámítja a hash-t, és a megfelelő bucketben keresi.
Ha a kulcs az hozzáadás után megváltozik, akkor az új állapotban kiszámított másik hash nem fog egyezni, és az elem nem lesz megtalálható — "elveszik" a térképen.
Ezért a HashMap-ben lévő kulcsoknak nem változtathatónak (immutable) kell lenniük, vagy nem szabad megváltozniuk, amíg kulcsként használják őket.
Probléma példája:
class Key {
int id;
Key(int id) { this.id = id; }
public int hashCode() { return id; }
public boolean equals(Object o) { return o instanceof Key && ((Key)o).id == id; }
}
Key key = new Key(1);
HashMap<Key, String> map = new HashMap<>();
map.put(key, "érték");
key.id = 2; // kulcs módosítva
System.out.println(map.get(key)); // null, mert a kulcs "elveszett"