Junior
Ինչու է օգտագործվում hashCode մեթոդը։
sobes.tech AI
Պատասխան AI-ից
Java և Kotlin- ում hashCode() մեթոդը օգտագործվում է օբյեկտին ներկայացնող ամբողջական թիվ ստանալու համար: Այն կարևոր դեր է խաղում հեշ-տախտակների վրա հիմնված հավաքածուներում (HashMap, HashSet, Hashtable), որտեղ այն օգտագործվում է արագ որոշելու համար, թե որ "խցիկում" (bucket) պետք է գտնվի կամ որոնվի օբյեկտը: Մுக்கிய կետեր՝
equalsևhashCodeպայմանագրի ապահովում: Եթե երկու օբյեկտներ համարվում են "հավասար"equals()մեթոդով, ապա նրանցhashCode()պետք է վերադարձնի նույն արժեքը: Հակառակը սխալ է՝ տարբեր օբյեկտներ կարող են ունենալ նույն հեշ-կոդը (կոլիզիա):- Արագ որոնում/ներմուծում: Հեշ-կոդը օգտագործվում է որպես ինդեքս արագ մուտք գործելու համար հեշ-հավաքածուներում: Բացակայության դեպքում մեծ հավաքածուներում որոնումը շատ ավելի դանդաղ կլիներ:
- Անպայմանականություն: Եթե օբյեկտը չի նախատեսվում օգտագործել որպես բանալի հեշ-հավաքածուներում, ապա
hashCode()-ի նախնական իրագործումը (հաճախ հիմնված հիշողության հասցեի վրա) կարող է բավարար լինել: Բայց եթե վերագրում եքequals(), ապա անհրաժեշտ է վերագրել նաևhashCode()՝ պայմանագրի պահպանման համար: - Տևականություն:
hashCode()արժեքը անփոփոխ օբյեկտի համար պետք է մնա անփոփոխ ողջ կյանքի ընթացքում: Փոփոխական օբյեկտների համար հեշ-կոդը կարող է փոխվել, բայց դա պահանջում է զգուշություն:
Նմուշային բազային իրագործում Kotlin-ով:
data class User(val id: Long, val name: String)
// Դատարկ տվյալների դասերի `hashCode()` և `equals()` ավտոմատորեն գեներացվում են
Նմուշային ձեռքով իրագործում Java-ով (կարևոր է ճիշտ համակցել արժեքները):
class User {
private final long id;
private final String name;
public User(long id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id &&
Objects.equals(name, user.name); // Օգտագործում ենք Objects.equals՝ NullPointerException-ից խուսափելու համար
}
@Override
public int hashCode() {
return Objects.hash(id, name); // Օգտագործում ենք Objects.hash՝ հեշ-կոդների համակցման համար
}
}