Artifacts と呼ばれるオブジェクトの TreeSet があります。次のように、オブジェクトの equals および hash コード メソッドをオーバーライドしました。
@Override
public int hashCode() {
return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
// if deriving: appendSuper(super.hashCode()).
append(artifactId).
toHashCode();
}
@Override
public boolean equals(Object arg0) {
Artifact obj=(Artifact)arg0;
if(this.getArtifactId().equalsIgnoreCase(obj.getArtifactId()))
{
return true;
}
return false;
}
equals メソッドにプリントを入れましたが、呼び出されません。次のようなコンパレータで TreeSet をインスタンス化しました。
TreeSet<Artifact> syncedList = new TreeSet<Artifact>(new ArtifactComparator());
TreeSet は equals オーバーライドに基づいて一意性を確立することを読みました。
TreeSet に同じ ArtifactId を持つ複数のオブジェクトが表示されますが、これは必要なほど一意ではありません。
equals および hash コードのメソッドに何か欠けているものはありますか?