私はJava 7を使用しており、以下のクラスがあります。私は正しく実装equals
しましたが、問題は、以下のメイン メソッドで戻りますが、両方のオブジェクトに対して同じハッシュ コードを返すことです。ここで何か間違ったことをしていないかどうかを確認するために、このクラスをもっと多くの人に見てもらうことはできますか?hashCode
equals
false
hashCode
更新:Objects.hash
メソッドを呼び出す行を独自のハッシュ関数に置き換えました: chamorro.hashCode() + english.hashCode() + notes.hashCode()
。異なるハッシュ コードを返します。これはhashCode
、2 つのオブジェクトが異なる場合に行うべきことです。Objects.hash
メソッドが壊れていませんか?
あなたの助けは大歓迎です!
import org.apache.commons.lang3.StringEscapeUtils;
public class ChamorroEntry {
private String chamorro, english, notes;
public ChamorroEntry(String chamorro, String english, String notes) {
this.chamorro = StringEscapeUtils.unescapeHtml4(chamorro.trim());
this.english = StringEscapeUtils.unescapeHtml4(english.trim());
this.notes = notes.trim();
}
@Override
public boolean equals(Object object) {
if (!(object instanceof ChamorroEntry)) {
return false;
}
if (this == object) {
return true;
}
ChamorroEntry entry = (ChamorroEntry) object;
return chamorro.equals(entry.chamorro) && english.equals(entry.english)
&& notes.equals(entry.notes);
}
@Override
public int hashCode() {
return java.util.Objects.hash(chamorro, english, notes);
}
public static void main(String... args) {
ChamorroEntry entry1 = new ChamorroEntry("Åguigan", "Second island south of Saipan. Åguihan.", "");
ChamorroEntry entry2 = new ChamorroEntry("Åguihan", "Second island south of Saipan. Åguigan.", "");
System.err.println(entry1.equals(entry2)); // returns false
System.err.println(entry1.hashCode() + "\n" + entry2.hashCode()); // returns same hash code!
}
}