Sobes.tech
Junior

Java'da equals ve hashCode metodları ne işe yarar?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da equals ve hashCode metodları, nesnelerin doğru karşılaştırılması ve hash tabanlı koleksiyonlar (örneğin, HashMap, HashSet) ile çalışmak için kullanılır.

  • equals(Object o): Mevcut nesnenin başka bir nesneye eşit olup olmadığını belirler. Varsayılan olarak, nesnelerin referanslarını karşılaştırır. Nesnelerin iç durumunu karşılaştırmak için geçersiz kılınır.

  • hashCode(): Nesnenin tam sayı değeri (hash kodu) döndürür. Koleksiyonlar tarafından, öğeleri hızlıca bulmak için kullanılır. equals ile uyumlu olmalıdır: equals ile eşit olan iki nesnenin hash kodları da aynı olmalıdır. Tersinin doğru olmadığı durumlar vardır.

Bu metodların yanlış veya eksik geçersiz kılınması, nesnelerin koleksiyonlarda kullanımı sırasında hatalı davranışlara yol açabilir, örneğin, nesne Set'e eklendikten sonra bulunamaması veya HashMap'te anahtar ile nesneye ulaşamama gibi.

Geçersiz kılma örneği:

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; // Referans karşılaştırması
        if (o == null || getClass() != o.getClass()) return false; // Tür ve null kontrolü

        MyObject that = (MyObject) o; // Tip dönüşümü

        if (id != that.id) return false; // Alan karşılaştırması
        return name != null ? name.equals(that.name) : that.name == null;
    }

    @Override
    public int hashCode() {
        int result = id; // Alanlara dayalı hash kodu hesaplama
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}