HashCode və yaddaş ünvanı arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
hashCode - obyektləri təmsil edən və hash cədvəllərinə əsaslanan kolleksiyalarda (məsələn, HashSet, HashMap) sürətli axtarış və müqayisə üçün istifadə olunan tam ədədi dəyərdir. Yaxşı hashCode eyni obyekt üçün ardıcıl olmalı və müxtəlif obyektlər arasında bərabər paylanmalıdır. Yaddaş ünvanı obyektin yaddaşda saxlandığı faktiki yerdir. Hər bir obyekt nümunəsi üçün unikal olub, proqramın həyat dövrü ərzində dəyişə bilər (məsələn, tullantı toplanması zamanı).
| Xüsusiyyət | hashCode |
Yaddaş ünvanı |
|---|---|---|
| Dəyər tipi | Tam ədəd | Yaddaşdakı yerə göstərici |
| Məqsəd | Hash kolleksiyalarında səmərəli saxlama və axtarış üçün istifadə olunur | Ob'ektin yaddaşdakı faktiki yeri |
| Unikal olmağı | Müxtəlif obyektlər üçün mütləq deyil | Hər ob'ekt üçün unikal |
| Dəyişə bilərmi? | Ümumiyyətlə dəyişmir (eyni obyektlər üçün) | Dəyişə bilər (məsələn, tullantı toplanması zamanı) |
Dartda, standart olaraq, hashCode-un tətbiqi çox vaxt yaddaş ünvanına əsaslanır. Ancaq, xüsusi siniflər üçün, == metodunu yenidən yazsanız, hashCode-u da yenidən yazmalısınız ki, == və hashCode arasında müqavilə pozulmasın: əgər iki obyekt == ilə bərabərdirsə, onların hashCode-ları da eyni olmalıdır.
class MyObject {
final int id;
final String name;
MyObject(this.id, this.name);
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is MyObject &&
name == other.name &&
id == other.id;
}
@override
int get hashCode => Object.hash(id, name); // hashCode-u yenidən yazmaq
}