在哈希表(Java)中,如何找到具有相同值的键数?
让我说:
Hashtable<String, int> table = new Hashtable<String, int>();
table.put("a", 1);
table.put("b", 2);
table.put("c", 2);
table.put("d", 2);
在这种情况下键:b,c和&amp; d将具有相同的值。我怎么能检测出来?
答案 0 :(得分:1)
Map<Integer, Integer> occurenceForValue = new HashMap<Integer, Integer>();
Hashtable<String, Integer> table = new Hashtable<String, Integer>();
Iterator it = table.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
if(!occurenceForValue.containsKey(pairs.getValue())
{
occurenceForValue.put(pairs.getValue(), 1);
}
else
{
occurenceForValue.put(pairs.getValue(), occurenceForValue.get(pairs.getValue()) + 1);
}
it.remove();
}
然后,occurenceForValue将为每个值(作为键)包含出现次数。
编辑:请注意我的代码中我更正了使用int作为泛型类型的HashTable定义,这是不允许的。
答案 1 :(得分:1)
首先,您必须在Hashtable
定义中使用引用类型(对象)。您不能使用int
等原始类型,必须使用Integer
。
就您的问题而言,您可以使用这样的小函数来计算HashTable
中某个值的次数:
int countOccurences(Hashtable<String, Integer> table, int value) {
int count = 0;
for(String key : table.keySet()) {
if(table.get(key) == value) {
count++;
}
}
return count;
}
因此,如果您想知道值2出现在表中的次数:
Hashtable<String, Integer> table = new Hashtable<String, Integer>();
table.put("a", 1);
table.put("b", 2);
table.put("c", 2);
table.put("d", 2);
System.out.println(countOccurences(table, 2));
这将打印3
答案 2 :(得分:1)
您不能在Collection中使用原始类型(您需要使用包装类型)。我建议你也使用钻石操作员。我会得到keySet
并迭代密钥,获取每个值并将其添加到SortedSet
(如果Set
已经不包含它,如果有,我会打印它) 。所以,我相信你正在寻找这样的东西,
Hashtable<String, Integer> table = new Hashtable<>();
table.put("a", 1);
table.put("b", 2);
table.put("c", 2);
table.put("d", 2);
Set<String> keySet = table.keySet();
SortedSet<Integer> toCount = new TreeSet<>();
for (String key : keySet) {
Integer val = table.get(key);
if (!toCount.contains(val)) {
System.out.printf("Key %s has value %d%n", key, val);
toCount.add(val);
} else {
System.out.printf("Key %s also has value %d%n", key, val);
}
}
哪个输出
Key b has value 2
Key a has value 1
Key d also has value 2
Key c also has value 2