Junior — Middle
Kā mainās HashMap struktūra un uzvedība Java valodā, mainot atslēgu?
sobes.tech AI
Atbilde no AI
HashMap iekšienē atslēgas tiek izmantotas, lai aprēķinātu hash-kodu un noteiktu elementa atrašanās vietu iekšējā struktūrā (bucket). Ja objekts, kas tiek izmantots kā atslēga, tiek mainīts tā, ka mainās tā hash-kods vai equals() metodes rezultāts, tas traucēs HashMap darbību.
Kāpēc?
- Pievienojot elementu, atslēga tiek hash-ēta, un elements tiek novietots noteiktā bucket.
- Meklējot elementu pēc atslēgas,
HashMapaprēķina hash un meklē atbilstošajā bucket.
Ja atslēga mainās pēc pievienošanas, tad jauns hash tiks aprēķināts ar jauno stāvokli, un elements netiks atrasts — tas "pazudīs" kartē.
Tāpēc HashMap atslēgas jābūt nemainīgām (immutable) vai tās nedrīkst mainīties, kamēr tās tiek izmantotas kā atslēgas.
Problēmas piemērs:
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, "vērtība");
key.id = 2; // atslēga mainīta
System.out.println(map.get(key)); // null, jo atslēga "pazuda"