Junior — Middle
Kako promena ključa utiče na strukturu i ponašanje HashMap u Javi?
sobes.tech АИ
Одговор од АИ
U HashMap-u, ključevi se koriste za izračunavanje hash-koda i određivanje pozicije elementa u unutrašnjoj strukturi (bucket). Ako objekat koji se koristi kao ključ bude izmenjen tako da se promeni njegov hash-kod ili rezultat metode equals(), to će narušiti rad HashMap.
Zašto?
- Pri dodavanju elementa, ključ se hash-uje i element se smešta u određeni bucket.
- Pri pretraživanju elementa po ključu,
HashMapizračunava hash i traži u odgovarajućem bucket-u.
Ako se ključ promeni nakon dodavanja, pri pretraživanju sa novim stanjem ključa biće izračunat drugačiji hash i element neće biti pronađen — on će "nestati" u mapi.
Zato, ključevi u HashMap treba da budu nepromenljivi (immutable) ili da se ne menjaju dok se koriste kao ključevi.
Primer problema:
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, "vrednost");
key.id = 2; // promena ključa
System.out.println(map.get(key)); // null, jer je ključ "nestao"