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.equalsile uyumlu olmalıdır:equalsile 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;
}
}