【问题标题】:using Float numbers for the map's key使用浮点数作为地图的键
【发布时间】:2011-05-13 04:16:04
【问题描述】:

创建新对象后:Map<Float,Integer> m = new HashMap()<Float,Integer>;

我有一个带有 "float" 数字的数组,它们是唯一的。我想将这些浮点数添加为m's key!我可以这样做吗:m.put(new Float(a[i]),"cat");

谢谢

【问题讨论】:

  • 你应该为你正在使用的编程语言添加一个标签。

标签: java algorithm hashmap


【解决方案1】:

如果可能,我建议不要使用浮点数作为哈希映射键。查找值时,您的键必须完全匹配,并且很容易得到不完全正确的浮点数。

【讨论】:

  • 这就是为什么在这些情况下使用精度,即
【解决方案2】:

只是把所有的答案放在一起。

  1. 提到的 Map 不能接受字符串,所以不能说 m.put(f, "cat")
  2. 您可以但不必使用 Float 包装浮动:自动装箱会自动为您完成,因此您只需说 m.put(a[i],"cat")
  3. 不建议您使用浮点类型(Float 和 Double)作为映射键。当您尝试使用 get(key) 方法从地图中提取值时,可能会导致问题
  4. 还要注意,浮动常量的默认类型是双精度,而不是浮点。所以,小心浮动,只有当你真的需要它们时才使用它们。在任何情况下,在 3.14f 等常量附近使用浮点修饰符。

【讨论】:

    【解决方案3】:

    您不能使用m.put(new Float(a[i]),"cat");,因为您的值必须是Integer。为此,您必须将其声明为 Map<Float,String> m = new HashMap()<Float,String>;

    【讨论】:

      【解决方案4】:

      截断到给定的精度以根据浮点数生成可预测的键。 JavaScript 中的示例

      const precision = Math.pow(10, 4); // where 4 is number of decimal places to retain
      const a = 12.5678912331; b = 13.75324122; c = 21.32112221
      const key = '' + Math.floor(a * precision) + '_' + Math.floor(b * precision) + '_' + Math.floor(c * precision);
      const aMap = new Map();
      aMap.set(key, 'some value');
      

      无用的事实:这取自用于索引 3d 对象中的顶点的代码。通过设置较低的精度,它允许合并附近的顶点

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        • 2015-12-04
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多