使用Float数字作为地图的键

时间:2010-11-20 19:13:32

标签: java algorithm hashmap

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

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

感谢

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

只是为了得到所有答案。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

截断到给定的精度以基于浮点数生成可预测的键。 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对象中的顶点的代码中获取的。通过设置较低的精度,可以合并附近的顶点