查找哈希表中有多少个键具有相同的值?

时间:2014-09-11 02:12:38

标签: java hashmap hashtable

在哈希表(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将具有相同的值。我怎么能检测出来?

3 个答案:

答案 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