java 使用浮点数作为Map的键

f45qwnt8  于 2023-09-29  发布在  Java
关注(0)|答案(5)|浏览(112)

创建一个新对象后:Map<Float,Integer> m = new HashMap()<Float,Integer>;
我有一个数组,其中"float"数字是唯一的。我想把这些浮点数加起来作为m's key!我可以这样做:m.put(new Float(a[i]),"cat");
谢谢

6jygbczu

6jygbczu1#

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

fnatzsnv

fnatzsnv2#

把所有的答案放在一起。
1.上面提到的Map不能接受字符串,所以你不能说m.put(f,“cat”)
1.你可以但不一定要使用Float来 Package float:auto-boxing会自动为你做,所以你可以说m.put(a[i],“cat”)
1.不建议使用浮点类型(Float和Double)作为Map键。当您尝试使用get(key)方法从map中提取值时,可能会导致问题
1.另请注意,浮点常量的默认类型是double,而不是float。所以,要小心使用浮动,只有在真正需要的时候才使用它们。在任何情况下,在常量附近使用float修饰符,如3.14f。

zhte4eai

zhte4eai3#

你不能做m.put(new Float(a[i]),"cat");,因为你的值必须是Integer。要做到这一点,您必须将其声明为Map<Float,String> m = new HashMap()<Float,String>;

wz8daaqr

wz8daaqr4#

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

bwntbbo3

bwntbbo35#

你可以使用Float代替float,它会将float转换为一个对象。我从来没有试过,但我认为它会起作用

相关问题