Junior
Ի՞նչ տարբերություն կա Java-ում equals և hashCode մեթոդների միջև։
sobes.tech AI
Պատասխան AI-ից
equals մեթոդը օգտագործվում է օբյեկտների համեմատության համար՝ նրանց բովանդակության հավասարությունը որոշելու համար, իսկ hashCode վերադարձնում է ամբողջ թիվ, որը ներկայացնում է օբյեկտի հեշ-կոդը:
Հիմնական տարբերությունները՝
- Նպատակը:
equals՝ տրամաբանական հավասարության որոշման համար,hashCode՝ հեշ-կոդի սերնդացման համար (հաճախ հեշ-կառուցված տվյալների կառուցվածքներում օգտագործելու համար): - Արդյունքը:
equalsվերադարձնում էboolean(ճշմարիտ կամ կեղծ),hashCode՝int: - Պայման: Եթե երկու օբյեկտներ հավասար են ըստ
equals, նրանցhashCode-ները պետք է լինեն նույնը: հակառակ դեպքում՝ դա սխալ է. նույնhashCode-ով օբյեկտները կարող են ունենալ տարբեր բովանդակություն (կլիզիա): - Օգտագործում:
equalsօգտագործվում է օբյեկտների զույգային համեմատության համար:hashCodeօգտագործվում է հեշ-կառուցված հավաքածուներում (օրինակ,HashSet,HashMap) արագ որոնման համար:
Օրինակ՝
// Օրինակային դաս
class MyObject {
private int id;
private String name;
public MyObject(int id, String name) {
this.id = id;
this.name = name;
}
// `equals`-ի վերագրում
@Override
public boolean equals(Object o) {
if (this == o) return true; // Տիպի ստուգում
if (o == null || getClass() != o.getClass()) return false; // null և տիպի ստուգում
MyObject myObject = (MyObject) o; // Տիպի փոխարկում
return id == myObject.id && Objects.equals(name, myObject.name); // Մայդյանների համեմատություն
}
// `hashCode`-ի վերագրում
@Override
public int hashCode() {
return Objects.hash(id, name); // Հեշ-կոդի սերունդ՝ հիմք ընդունելով մայդյանները
}
}
Կարևոր է, որ երկու մեթոդներն էլ (equals և hashCode) միասին վերագրեն, եթե մեկը վերագրում է, որպեսզի պայմանագիրը չխախտվի և հավաքածուների ճիշտ աշխատանքը ապահովվի: