Ի՞նչ է 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
}