Sobes.tech
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
}