Sobes.tech
Middle

Фарқи байни hashCode ва суроғаи хотира чист?

sobes.tech AI

Ҷавоб аз AI

hashCode - ин арзиши пурраест, ки намояндагии объект аст ва дар коллексияҳои асосёфта бар пояи ҷадвалҳои ҳеш (масалан, HashSet, HashMap) барои ҷустуҷӯи зуд ва муқоиса истифода мешавад. Ҳамон hashCode бояд барои ҳамон объект устувор бошад ва ба таври баробар байни объектҳои гуногун тақсим шавад. Суроғаи хотира воқеан ҷойи дар хотира аст, ки объект дар он нигоҳ дошта мешавад. Ин барои ҳар як нусхаи объект уникалӣ аст ва метавонад дар давоми ҳаёти барнома тағир ёбад (масалан, дар вақти ҷамъоварии партовҳо).

Хусусият hashCode Суроғаи хотира
Навъи арзиш Суммаи пурра Показатель ба ҷойи дар хотира
Мақсад Барои нигоҳдории муассир ва ҷустуҷӯи дар колексияҳои ҳеш Ҷойгиршавии воқеии объект дар хотира
Яке будан Маъзул нест, барои объектҳои гуногун лозим нест Яке барои ҳар объект дар хотира
Мумкин аст тағир ёбад? Одатан не (барои объектҳои баробар) Мумкин аст тағир ёбад (масалан, дар вақти ҷамъоварии партовҳо)

Дар Dart, дар асоси пешфарз, hashCode барои аксарияти объектҳо бар асоси суроғаи хотира аст. Аммо, барои синфҳои фармоишӣ, агар методи == баррасӣ шавад, бояд hashCode низ баррасӣ шавад, то шарт байни == ва hashCode нигоҳ дошта шавад: агар ду объект мувофиқи == баробар бошанд, hashCode-и онҳо бояд якхела бошад.

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
}