Sobes.tech
Junior

Java-da equals və hashCode metodları nə üçün lazımdır?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da equalshashCode metodları obyektlərin düzgün müqayisəsi və hash-əsaslı kolleksiyalar ilə işləmək üçün istifadə olunur (məsələn, HashMap, HashSet).

  • equals(Object o): Cari obyektin başqa bir obyektə bərabər olub-olmadığını müəyyən edir. Standart olaraq, obyektlərin ünvanlarını müqayisə edir. Obyektlərin daxili vəziyyətini müqayisə etmək üçün yenidən yazılır.

  • hashCode(): Obeyektin tam ədəd dəyərini (hash kodu) qaytarır. Kolleksiyalar tərəfindən elementləri tez tapmaq üçün istifadə olunur. equals ilə uyğun olmalıdır: əgər iki obyekt equals-ə görə bərabərdirsə, onların hash kodları da eyni olmalıdır. Əks arqument doğru deyil.

Bu metodların düzgün olmayan və ya təkrarlanmasının olmaması, obyektlərin kolleksiyalarda istifadəsində düzgün olmayan davranışlara səbəb ola bilər, məsələn, obyekt Set-ə əlavə edildikdən sonra tapılmaması və ya HashMap-də açar vasitəsilə obyektin tapıla bilməməsi.

Yenidən yazma nümunəsi:

public class MyObject {
    private int id;
    private String name;

    public MyObject(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Referansların müqayisəsi
        if (o == null || getClass() != o.getClass()) return false; // Növ və null yoxlaması

        MyObject that = (MyObject) o; // Tipə çevirmə

        if (id != that.id) return false; // Sahə müqayisəsi
        return name != null ? name.equals(that.name) : that.name == null;
    }

    @Override
    public int hashCode() {
        int result = id; // Sahələrə əsaslanan hash kodunun hesablanması
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}