java - 比较 double map

标签 java hashmap double comparison

我有一个Map<Integer,Double>作为一个字段。我需要实现equals()对于该给定的类。

如何使用容差比较 double 值。

最佳答案

public class Foo {
Map<Integer, Double> data;

public Map<Integer, Double> getData() {
    return data;
}

public void setData(Map<Integer, Double> data) {
    this.data = data;
}

@Override
public boolean equals(Object o) {
    if (this == o)
        return true;
    if (!(o instanceof Foo))
        return false;
    Foo foo = (Foo) o;
    if (this.data.size() != foo.getData().size())
        return false;

    Set<Integer> keySet1 = data.keySet();
    Set<Integer> keySet2 = foo.getData().keySet();
    // keys should same
    if (keySet1.containsAll(keySet2) && keySet2.containsAll(keySet1)) {
        // for the same key, the values are close
        for (Integer key : keySet1) {
            if (!isEntryEqual(data.get(key), foo.getData().get(key))) {
                return false;
            }
        }
        return true;
    }


    return false;
}

// also need to override the hashCode method


@Override
public int hashCode() {
    List<Integer> keys = new ArrayList<Integer>(this.data.keySet());
    return Objects.hash(keys);
}

public static final Double PRECISION = 0.0001;

private static boolean isEntryEqual(Double d1, Double d2) {
    return d1 - d2 < PRECISION;
}
}

关于java - 比较 double map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44154318/

相关文章:

java - 使用数组查找 2 个列表之间的最大数字

swift - CGRect 选项之间有什么区别?

java - JFreeChart拖拽绘图区

algorithm - 满足所有顾客所需的最低饮品数量

Java - 在不覆盖的情况下向现有 HashMap 键添加另一个字符串值?

c# - .NET 及更高版本 : best practices for using double arithmetic

java - 将特定范围的数字添加到数组

Java 类文字和反射?

java - 从java中的String中删除特定字符

java - 将两个通配符 HashMap 合并为一个通配符 HashMap