Sobes.tech
Middle

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, ==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
}