我有一个数组,其元素是浮动的。我可以将这个数组复制到哈希表吗?
感谢
答案 0 :(得分:3)
您可以轻松地将它们放入Hashtable
int
- > float
。以下方法将使用数组中的索引作为键。
float[] arr;
Hashtable<Integer, Float> table = new Hashtable<Integer, Float>(arr.length);
for (int i = 0; i < arr.length; i++) {
table.put(i, arr[i]);
}
答案 1 :(得分:3)
数组不能直接对应Map。它可以对应一组。
new HashSet(Arrays.asList(array))
答案 2 :(得分:0)
Hashtable实现了Map,因此您需要将每个float与一些键配对。
答案 3 :(得分:0)
鉴于OP在jjnguy的答案中澄清了他/她的要求,这里有一个O(n)
(摊销)方法来计算浮点数组中唯一值的出现次数:
float[] values;
Map<Float, Integer> occurrences = new HashMap<Float, Integer>();
for ( float f : values ) {
int count = occurrences.containsKey(f) ? occurrences.get(f) : 0;
occurrences.put(f, count+1);
}
//then find multiple occurrences by finding entries with a value > 0
for ( Entry<Float, Integer> entry : occurrences.values() ) {
if ( entry.getValue() > 1 ) {
System.out.println("Duplicate: " + entry.getKey());
}
}
在实践中,通常使用浮动作为任何东西的关键,或以假装它是离散值的方式使用浮动通常是臭的。浮点类型通常用于模拟“连续”值,其中所有意图和目的7.000000000012应被视为与7.000000000013相同。
答案 4 :(得分:0)
如果您想知道阵列中有多少不同的浮点值,最好的解决方案是多集(通常建在Map<T, Integer>
之上)。使用Guava,您可以执行此操作:
float[] floats = ...
Multiset<Float> multiset = HashMultiset.create(Floats.asList(floats));
for (Multiset.Entry<Float> entry : multiset.entrySet()) {
Float value = entry.getElement();
int count = entry.getCount();
...
}