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, анткени ачкыч "жоголду"