【问题标题】:Map with Double Array get method returning null使用 Double Array get 方法返回 null 的映射
【发布时间】:2020-04-05 14:33:52
【问题描述】:

"Map-Double[], Double-" 是映射的创建方式 - 作为哈希映射。 试图将 [0.0, 0.0] 的 Double[] 输入到映射中以获取值,但它返回的值为 null。

    Scanner input = new Scanner(new File(fileName));
    while (input.hasNextLine()) {
        String[] listed = input.nextLine().split("\\s+");
        Double[] key = new Double[2];
        Double value = 0.0;
        for(int i = 0; i<3; i++) {
            if(i<2) {
                key[i] = Double.parseDouble(listed[i]);
            } else {
                value = Double.parseDouble(listed[i]);
            }
        }

这对代码来说很重要,它只是从文件中读取并将其放入 HashMap 中。

【问题讨论】:

  • 发布您的代码。
  • 抱歉已解决,请在 cmets 中查看以下答案
  • 请不要通过删除信息来破坏您的问题。我已回滚您的编辑。
  • 这更多是因为它对于找到问题的答案并不重要。

标签: java arrays hashmap


【解决方案1】:

Double[] 的数组没有考虑数组条目实际内容的 equals/hashcode 方法。只有当你使用相同的实例时,数组中的这些方法才会匹配。

所以你不能在 HashMap 中使用数组作为键,使用List&lt;Double&gt; 作为键可以工作,但还有其他问题。我会推荐一个带有自定义equals()/hashcode() 实现的专用类。

将 equls/hashcode 与 double 一起使用也是很成问题的。

【讨论】:

  • 没有其他类型的地图可以更好地实现这一点吗?
  • 因为你没有指定你想做什么,所以很难说。一种选择是番石榴表..
  • 我的问题是它们自己的值都不是唯一的键,但不幸的是我必须使用地图
  • 如果你真的需要小数作为键,这听起来像是一个自定义类的用例,它有一个自定义的 equals/hashcode。我会考虑 BigDecimal 或具有固定偏移量的 long/int。 double 上的精确匹配确实有问题。
  • 别担心,我解决了它,它真的很俗气而且很糟糕,但我不在乎。基本上只需要遍历所有键并逐一检查给定的值,我可以使用链接的哈希映射对其进行排序,并在发现它在某种程度上缩短处理时间时退出循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2014-12-09
  • 2016-07-10
  • 1970-01-01
相关资源
最近更新 更多