Sobes.tech
Middle

Equals ve hashCode metodları için hangi kurallar vardır?

sobes.tech yapay zeka

AI'dan gelen yanıt

  1. equals(Object) yöntemiyle iki nesne eşitse, onların karma kodları (hashCode() yöntemiyle döndürülür) aynı olmalıdır.
  2. equals(Object) yöntemiyle iki nesne eşit değilse, onların karma kodları aynı veya farklı olabilir. Eşit olmayan nesneler için farklı karma kodları sağlamak, hash tabanlı koleksiyonların performansını artırmak için iyi bir uygulamadır.
  3. hashCode() yöntemi, aynı nesne için birden çok çağrıda aynı değerleri döndürmelidir, eğer karma kodunu hesaplamak için kullanılan bilgiler değişmediyse.
  4. Simetri: herhangi bir a ve b nesnesi için, eğer a.equals(b) true ise, b.equals(a) de true olmalıdır.
  5. Yansıtıcılık: herhangi bir null olmayan a nesnesi için, a.equals(a) true olmalıdır.
  6. Transitiflik: herhangi a, b ve c nesneleri için, eğer a.equals(b) true ve b.equals(c) true ise, a.equals(c) de true olmalıdır.
  7. Tutarlılık: herhangi null olmayan a ve b nesneleri için, a.equals(b) çoklu çağrıları tutarlı bir şekilde true veya false döndürmelidir, equals(Object) karşılaştırmasında kullanılan bilgiler değişmediyse.

Uygulama örneği:

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) {
        // Nesne kimliğinin kontrolü
        if (this == o) {
            return true;
        }
        // Nesne tipinin kontrolü
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // Tip dönüşümü
        MyClass myClass = (MyClass) o;
        // Alanlar üzerinden karşılaştırma
        return value == myClass.value &&
               Objects.equals(name, myClass.name); // null kontrolü için Objects.equals kullanılır
    }

    @Override
    public int hashCode() {
        // Hash kodu oluşturmak için Objects.hash kullanılır
        return Objects.hash(value, name);
    }

    // Diğer metodlar...
}