Sobes.tech
Junior — Middle

Javaда HashMapтин түзүлүшү жана жүрүм-турумун калитти өзгөртүүнүн таасири кандай?

sobes.tech AI

AIден жооп

HashMap ичинде ачкычтар колдонулуп, хеш-кодду эсептөө жана элементтин ички түзүлүштөгү (бакет) жайгашкан жерин аныктоо үчүн колдонулат. Эгер колдонулган ачкыч объектисинин хеш-коду же equals() методу өзгөрсө, бул HashMapтин иштешине тоскоол болот.

Эмне үчүн?

  • Элемент кошулганда, ачкыч хештелип, элемент белгилүү бир бакетке жайгаштырылат.
  • Элементти ачкыч боюнча издегенде, HashMap хешти эсептейт жана тиешелүү бакетте издейт.

Эгер ачкыч кошулгандан кийин өзгөрсө, жаңы абалда башка хеш эсептелип, элемент табылбай калат — ал "жоголот" картада.

Ошондуктан, HashMapтеги ачкычтар өзгөрбөс (immutable) болушу керек же колдонулуп жатканда өзгөрбөшү керек.

Маселе мисалы:

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, "баа");

key.id = 2; // ачкыч өзгөртүлдү

System.out.println(map.get(key)); // null, анткени ачкыч "жоголду"