調査した後も、私の問題の特定の解決策はまだ見つかりません。私はhashCodeメソッドが正確な値を使用している間、イプシロンを使用する "ほぼ等しい"メソッドを持っています。これは、値を比較するときにHashSetの前提条件を破ります。一貫性のないハッシュコードと等価のJava
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof EPoint)) {
return false;
}
EPoint ePoint = (EPoint) o;
return Math.abs(Math.abs(ePoint.lat) - Math.abs(lat)) < EPSILON && Math.abs(Math.abs(ePoint.lon) - Math.abs(lon)) < EPSILON;
}
@Override
public int hashCode() {
return Objects.hash(lat, lon);
}
hasCode()をmy equalsメソッドと一貫性を持たせる方法が見つかりません。
(EPointのinstanceof O)あなたはのgetClassと比較する必要がありません! instanceOf、そうでなければ、考えられるサブクラスに問題が発生する危険性があります。これは地球上で何が等しくなければならないのですか?返すMath.abs(Math.abs(ePoint.lat) - Math.abs(lat))
Stultuske
近似等価に等号を使用しないでください。異なる名前のメソッドを作成します。 – Kayaman
両方の正確な値をハッシュするのではなく、差分に関するハッシュをハッシュしないのはなぜですか?同じデルタに対して同じハッシュを与えるのではないでしょうか?あなたが 'equals'メソッドでしたように。 – Zabuza