Sobes.tech
Middle

Equals və hashCode metodları üçün hansı qaydalar mövcuddur?

sobes.tech Süni İntellekt

AI-dan cavab

  1. Əgər iki obyekt equals(Object) metoduna görə bərabərdirsə, onların hash kodları (hashCode()) eyni olmalıdır.
  2. Əgər iki obyekt equals(Object) metoduna görə bərabər deyilsə, onların hash kodları bərabər və ya fərqli ola bilər. Bərabər olmayan obyektlər üçün fərqli hash kodlarının təmin edilməsi, hash əsaslı kolleksiyaların performansını yaxşılaşdırmaq üçün yaxşı bir təcrübədir.
  3. hashCode() metodu, istifadə olunan məlumatlar dəyişmədiyi halda, eyni obyekt üçün çoxsaylı çağırışlarda eyni dəyərləri qaytarmalıdır.
  4. Simmetriya: hər hansı ab obyektləri üçün, əgər a.equals(b) true isə, b.equals(a)true olmalıdır.
  5. İntizam: hər hansı ab üçün, a.equals(a) true olmalıdır.
  6. Transitivlik: hər hansı a, bc üçün, əgər a.equals(b) trueb.equals(c) true isə, a.equals(c)true olmalıdır.
  7. Konsistensiya: hər hansı ab üçün, çoxsaylı a.equals(b) çağırışları ardıcıl olaraq true və ya false qaytarmalıdır, equals(Object)-də istifadə olunan məlumatlar dəyişmədiyi halda.

İcra nümunəsi:

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) {
        // Ob'ektin identikliyinin yoxlanması
        if (this == o) {
            return true;
        }
        // Ob'ekt tipinin yoxlanması
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // Tipə çevrilmə
        MyClass myClass = (MyClass) o;
        // Sahələr üzrə müqayisə
        return value == myClass.value &&
               Objects.equals(name, myClass.name); // Null üçün Objects.equals istifadə olunur
    }

    @Override
    public int hashCode() {
        // Hash kodu yaratmaq üçün Objects.hash istifadə olunur
        return Objects.hash(value, name);
    }

    // Digər metodlar...
}