我实现了一个 equals 方法,如下所示,具有 double 容差级别。
public boolean equals(Object obj) {
// Checking for not null and same class etc.
return approxEqual(this,other);
}
private static boolean approxEqual(final Position p1, final Position p2) {
double distance = // distance function between positions
return Double.compare(distance, TOLERANCE) <= 0;
}
因为我正在使用 HashSet
,所以我需要一个具有相同功能的哈希方法。
你们知道怎么做吗?
我知道,容忍度并不是很好,因为 equals 方法应该是可传递的。但我需要平衡测量误差。
最佳答案
假设:假设您的公差暂时为 1。这意味着 0 等于 0.8,因为它们的差异低于公差。然后让我们比较 0.8 和 1.5,它们相等,因为它们的差异是 0.7 < 1。这意味着它们将获得相同的哈希值,这意味着 0 和 1.5 具有相同的哈希值,重复该过程和一切 将得到相同的散列值/相等。
这没有意义,是吗?你不能做 equal
或 hashcode
with tolerance。
关于java - 具有公差级别的 double 哈希方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427667/