Java-da equals və hashCode metodları nə üçün lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
Java-da equals və hashCode 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.equalsilə uyğun olmalıdır: əgər iki obyektequals-ə 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;
}
}