조사한 후에도 여전히 내 문제의 특정 솔루션을 찾을 수 없습니다. 내 hashCode 메서드는 정확한 값을 사용하는 동안 "엡손"사용하는 "약 equals"메서드가 있습니다. 이것은 값을 비교할 때 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()가 내 equals 메서드와 일치하도록 만드는 방법을 찾을 수 없습니다.
(EPoint instanceof를 O)는, getClass하지 비교해야한다! instanceOf, 그렇지 않으면 가능한 하위 클래스에 문제가 발생할 위험이 있습니다. 그리고 지구상에 이것은 equals와 어떤 관련이 있습니까? return Math.abs (Math.abs (ePoint.lat) - Math.abs (lat))
Stultuske
근사값에 equals를 사용하지 마십시오. 다른 이름의 메서드를 만듭니다. – Kayaman
정확한 값을 모두 해시하는 대신 델타에 대한 차이를 해시하지 않는 이유는 무엇입니까? 같은 델타에 대해 같은 해쉬를 줄까요? 당신이 '평등'방법으로했던 것처럼. – Zabuza