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
}