Sobes.tech
Middle

რა წესები არსებობს equals და hashCode მეთოდებისთვის?

sobes.tech AI

პასუხი AI-სგან

  1. თუ ორი ობიექტი თანასწორია equals(Object) მეთოდით, მათი ჰეშკოდი (რომელიც აბრუნებს hashCode()) უნდა იყოს ერთნაირი.
  2. თუ ორი ობიექტი არ არის თანასწორი equals(Object) მეთოდით, მათი ჰეშკოდები შესაძლოა იყოს ერთნაირი ან განსხვავებული.
  3. hashCode() მეთოდი უნდა აბრუნებდეს ერთნაირ მნიშვნელობას ერთსა და იმავე ობიექტზე მრავალჯერ გამოძახებისას, თუ ჰეშკოდის გამოთვლაში გამოყენებული ინფორმაცია არ შეცვლილა.
  4. სიმმეტრიულობა: ნებისმიერი a და b ობიექტებისთვის, თუ a.equals(b) არის true, მაშინ b.equals(a) ასევე უნდა იყოს true.
  5. რეფლექსიურობა: ნებისმიერი ნულოვანი არაა a ობიექტისთვის, a.equals(a) უნდა იყოს true.
  6. ტრანზიტურობა: ნებისმიერი a, b და c ობიექტებისთვის, თუ a.equals(b) არის true და b.equals(c) არის true, მაშინ a.equals(c) ასევე უნდა იყოს true.
  7. შეთანხმება: ნებისმიერი ნულოვანი არაა 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);
    }

    // სხვა მეთოდები...
}