具有容差级别的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 楼答案
使用
TreeMap
而不是HashMap
如果在^{} /^{} 方法中实现了容差,那么任何键查找/插入都将“捕捉”到容差内的现有键
当然还有一个警告,即插入顺序可能会影响结果。例如,如果公差为5,且值为2、6和9,则先添加6会将2和9捕捉到6值,结果是一个键(6),否则最终会出现两个键(2和9),6捕捉到2还是9是任意的
有了宽容,你真的无法改变这种不可预测性,所以我相信这是解决你问题的最好办法