Java中HashMap中双精度键的问题

Java中HashMap中双精度键的问题,java,hashmap,double,Java,Hashmap,Double,我遇到一个面试问题,我不确定正确答案是什么 问题就在下面 给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标 我通过循环元素并将目标和元素之间的差异存储为映射中当前元素的键和索引来解决这个问题 稍后当diff出现在数组中时,我可以在map中查找哪个元素有这个diff,以及map中的哪个索引 到目前为止还不错 但是,对于后续问题,“如果元素是双重的怎么办?” 如果有的话,我不确定是什么问题 在搜索时,我遇到了几篇文章,提到了使用逻辑移位和or计算哈希代码的正确方法。但是,我看到Jav

我遇到一个面试问题,我不确定正确答案是什么

问题就在下面

给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标

我通过循环元素并将目标和元素之间的差异存储为映射中当前元素的键和索引来解决这个问题

稍后当diff出现在数组中时,我可以在map中查找哪个元素有这个diff,以及map中的哪个索引

到目前为止还不错

但是,对于后续问题,“如果元素是双重的怎么办?”

如果有的话,我不确定是什么问题

在搜索时,我遇到了几篇文章,提到了使用逻辑移位和or计算哈希代码的正确方法。但是,我看到Java的Double.hashcode函数中使用了类似的逻辑

我认为问题可能是在计算差异时,可能会有精度损失。因此,它可能最终映射到另一个散列桶

然而,当我尝试的时候,我想不出这样的输入。实际问题是什么?我如何测试/解决它

爪哇


我试图简单地将数字改为两倍,但逻辑工作正常。

此程序通过两元素数组说明了问题:

public strictfp class Test {
  public static void main(String[] args) {
    double in[] = {1e10, Math.nextUp(1e10)};
    double target = 2e10;
    System.out.println(in[0]+in[1]);
    double diff = target-in[0];
    System.out.println(diff);
    System.out.println(in[1] == diff);
    System.out.println(in[0]+in[1] == target);
  }
}
输出:

2.0E10
1.0E10
false
true
问题是,逻辑假设只有一个值,当添加到数组的元素时,该值给出目标和。由于四舍五入,对于
double
元素,可以有多个值给出相同的和

在我的示例中,数组的两个元素之和等于目标,但第二个元素不等于[0]中的
与目标之间的差

我对该问题的浮点版本的解决方案的第一个想法如下:

Create an array of ordered pairs containing value and index.
Sort by value.
For each element x, do a binary search for an element y such that x.value + y.value is equal to the target.
If you find one, return [x.index, y.index]

这是O(n log(n)),其中int版本是O(n)。

此程序使用两元素数组说明了问题:

public strictfp class Test {
  public static void main(String[] args) {
    double in[] = {1e10, Math.nextUp(1e10)};
    double target = 2e10;
    System.out.println(in[0]+in[1]);
    double diff = target-in[0];
    System.out.println(diff);
    System.out.println(in[1] == diff);
    System.out.println(in[0]+in[1] == target);
  }
}
输出:

2.0E10
1.0E10
false
true
问题是,逻辑假设只有一个值,当添加到数组的元素时,该值给出目标和。由于四舍五入,对于
double
元素,可以有多个值给出相同的和

在我的示例中,数组的两个元素之和等于目标,但第二个元素不等于[0]
中的
与目标之间的差

我对该问题的浮点版本的解决方案的第一个想法如下:

Create an array of ordered pairs containing value and index.
Sort by value.
For each element x, do a binary search for an element y such that x.value + y.value is equal to the target.
If you find one, return [x.index, y.index]

这是O(n log(n)),其中int版本是O(n)。

谢谢!!这就是我要找的!如果我们不得不这样做,你对如何解决这个问题有什么意见吗?谢谢!!这就是我要找的!如果我们不得不去做的话,有没有关于如何解决的意见?