Дар бораи муноқишаҳо дар HashMap гап занед.
sobes.tech AI
Ҷавоб аз AI
Ҳошия дар HashMap вақте рух медиҳад, ки ду калиди гуногун як хеш-коди ҳамонро доранд. Ин ба гум кардани маълумотҳо оварда намерасонад, аммо ба самаранокии кор таъсир мерасонад.
Ҳангоми илова кардани унсур:
hashCode()-и калид даъват мешавад.- Индекси коҳ дар массив бо асоси хеш-код ҳисоб карда мешавад.
- Агар коҳ холӣ бошад, унсур илова мешавад.
- Агар коҳ аллакай унсурҳо дошта бошад, барои ҳар унсур дар коҳ
equals()бо калиди нав даъват мешавад. - Агар
equals()trueбаргардонад, арзиш нав карда мешавад. - Агар
equals()ҳамешаfalseбаргардонад, унсури нав ба коҳ илова карда мешавад.
То Android 7.0 (Nougat), HashMap аз рӯи пайвандҳои пайвандӣ барои ҳалли ҳошияҳо истифода мекард. Бо шумораи зиёди ҳошияҳо дар як коҳ, ҷустуҷӯ дар рӯйхати пайвандӣ O(n) мешавад, ки n шумораи унсурҳо дар коҳ аст.
Аз Android 7.0 ба баъд, барои коҳҳои бо шумораи зиёди ҳошияҳо (ҳадди 8 унсур), HashMap автоматӣ рӯйхати пайвандиро ба дарахти сурх-сиёҳ (TreeNode) табдил медиҳад. Ҷустуҷӯ дар дарахт дорои мураккабии O(log n) аст, ки ба таври назаррас самаранокиро дар ҳолатҳои бо ҳошияҳо зиёд беҳтар мекунад. Агар шумораи унсурҳо дар коҳ боз ба зери ҳадди (6 унсур) баргардад, дарахт ба рӯйхати пайвандӣ баргардонида мешавад.
Имплементацияи хуби hashCode() ва equals() барои объектҳои фармоишӣ калид аст барои кам кардани ҳошияҳо ва таъмин кардани самаранокии HashMap.
Масалан:
@Override
public int hashCode() {
// Намунаи хуби иҷрои hashCode
int result = 17;
result = 31 * result + field1.hashCode();
result = 31 * result + field2;
return result;
}
@Override
public boolean equals(Object o) {
// Намунаи дурустии иҷрои equals
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyObject myObject = (MyObject) o;
return field2 == myObject.field2 &&
field1.equals(myObject.field1);
}