Middle
რა წესები არსებობს equals და hashCode მეთოდებისთვის?
sobes.tech AI
პასუხი AI-სგან
- თუ ორი ობიექტი თანასწორია
equals(Object)მეთოდით, მათი ჰეშკოდი (რომელიც აბრუნებსhashCode()) უნდა იყოს ერთნაირი. - თუ ორი ობიექტი არ არის თანასწორი
equals(Object)მეთოდით, მათი ჰეშკოდები შესაძლოა იყოს ერთნაირი ან განსხვავებული. hashCode()მეთოდი უნდა აბრუნებდეს ერთნაირ მნიშვნელობას ერთსა და იმავე ობიექტზე მრავალჯერ გამოძახებისას, თუ ჰეშკოდის გამოთვლაში გამოყენებული ინფორმაცია არ შეცვლილა.- სიმმეტრიულობა: ნებისმიერი
aდაbობიექტებისთვის, თუa.equals(b)არისtrue, მაშინb.equals(a)ასევე უნდა იყოსtrue. - რეფლექსიურობა: ნებისმიერი ნულოვანი არაა
aობიექტისთვის,a.equals(a)უნდა იყოსtrue. - ტრანზიტურობა: ნებისმიერი
a,bდაcობიექტებისთვის, თუa.equals(b)არისtrueდაb.equals(c)არისtrue, მაშინa.equals(c)ასევე უნდა იყოსtrue. - შეთანხმება: ნებისმიერი ნულოვანი არაა
aდაbობიექტებისთვის, მრავალჯერადი გამოძახებებიa.equals(b)უნდა აბრუნებდეს თანმიმდევრულადtrueანfalse, თუequals(Object)-ში გამოყენებული ინფორმაცია არ შეცვლილა.
სადემონსტრაციო მაგალითი:
public class MyClass {
private int value;
private String name;
public MyClass(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// ობიექტების იდენტურობის შემოწმება
if (this == o) {
return true;
}
// ობიექტის ტიპის შემოწმება
if (o == null || getClass() != o.getClass()) {
return false;
}
// ტიპის გადატანა
MyClass myClass = (MyClass) o;
// ველების შედარება
return value == myClass.value &&
Objects.equals(name, myClass.name); // Objects.equals გამოყენება null-ებისთვის
}
@Override
public int hashCode() {
// Objects.hash გამოყენება ჰეშკოდის გენერაციისთვის ველების საფუძველზე
return Objects.hash(value, name);
}
// სხვა მეთოდები...
}