有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我实现了一个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) 个答案

  1. # 1 楼答案

    使用TreeMap而不是HashMap

    如果在^{}/^{}方法中实现了容差,那么任何键查找/插入都将“捕捉”到容差内的现有键

    当然还有一个警告,即插入顺序可能会影响结果。例如,如果公差为5,且值为2、6和9,则先添加6会将2和9捕捉到6值,结果是一个键(6),否则最终会出现两个键(2和9),6捕捉到2还是9是任意的

    有了宽容,你真的无法改变这种不可预测性,所以我相信这是解决你问题的最好办法