Middle
Mis vahe on hashCode ja mäluaadressil?
sobes.tech AI
Vastus AI-lt
hashCode – see on täisarvuline väärtus, mis esindab objekti ja mida kasutatakse hash-põhistes kogumites (näiteks HashSet, HashMap) kiireks otsimiseks ja võrdlemiseks. Hea hashCode peab olema järjepidev samale objektile ja ühtlaselt jaotuma erinevate objektide vahel. Mälu aadress on füüsiline koht mälus, kus objekt asub. See on unikaalne iga eksemplari jaoks ja võib programmi töö jooksul muutuda (näiteks prügikoristuse ajal).
| Omadus | hashCode |
Mälu aadress |
|---|---|---|
| Väärtusetüüp | Täisarv | Viide mälukohta |
| Otstarve | Efektiivseks salvestamiseks ja otsimiseks hash-kogumites | Objekti füüsiline asukoht mälus |
| Unikaalsus | Ei ole tingimata unikaalne erinevate objektide jaoks | Unikaalne iga objekti jaoks mälus |
| Kas võib muutuda? | Tavaliselt mitte (samade objektide puhul) | Võib muutuda (näiteks prügikoristuse ajal) |
Dartis põhineb hashCode vaikimisi enamasti objekti mäluaadressil. Kui aga üle kirjutada == meetod, tuleb üle kirjutada ka hashCode, et säilitada == ja hashCode vahel kokkulepe: kui kaks objekti on võrdsed == järgi, peavad nende hashCode väärtused olema samad.
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); // Üle kirjutatud hashCode
}