Sobes.tech
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, HashMap aprēķ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"