java - 具有公差级别的 double 哈希方法

标签 java hash equals

我实现了一个 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 具有相同的哈希值,重复该过程和一切 将得到相同的散列值/相等。

这没有意义,是吗?你不能做 equalhashcode with tolerance。

关于java - 具有公差级别的 double 哈希方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427667/

相关文章:

java - 两个整数的等于方法

ruby - Hash 的 compare_by_identity 是如何工作的?

perl - 仅用一个键在哈希中查找键名?

perl - 遍历 perl 中的哈希值

c# enum equals() 与 ==

mysql - 使用 NOT EQUAL 运算符时处理 NULL

java - 使用 mongo-java-driver 使用 x509 证书对 MongoDB v2.6 进行身份验证时遇到问题

JavaFX 2.2 使用带有 FXML 的第二个窗口

java - 修复 JPopupMenu 分隔符 (GTK LaF) 和项目突出显示

java - WildFly 11 - 使用证书发出 https 请求