Middle
Equals və hashCode metodları üçün hansı qaydalar mövcuddur?
sobes.tech Süni İntellekt
AI-dan cavab
- Əgər iki obyekt
equals(Object)metoduna görə bərabərdirsə, onların hash kodları (hashCode()) eyni olmalıdır. - Ə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. 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.- Simmetriya: hər hansı
avəbobyektləri üçün, əgəra.equals(b)trueisə,b.equals(a)dətrueolmalıdır. - İntizam: hər hansı
avəbüçün,a.equals(a)trueolmalıdır. - Transitivlik: hər hansı
a,bvəcüçün, əgəra.equals(b)truevəb.equals(c)trueisə,a.equals(c)dətrueolmalıdır. - Konsistensiya: hər hansı
avəbüçün, çoxsaylıa.equals(b)çağırışları ardıcıl olaraqtruevə yafalseqaytarmalı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...
}