我可以将数组复制到哈希表吗?

时间:2010-11-19 19:25:11

标签: java arrays collections hashtable

我有一个数组,其元素是浮动的。我可以将这个数组复制到哈希表吗?

感谢

5 个答案:

答案 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();
  ...
}