通过HashMaps迭代查找键数

时间:2013-09-06 11:40:17

标签: java hashmap key

所以我一直在尝试编写一个接受HashMap的方法,并计算HashMap中有多少相同的键。所以这是代码,它应该是非常自我解释的。

import java.util.HashMap;
import java.util.Map;

public class ExtendedHashMap extends HashMap<String, Integer> {

public ExtendedHashMap() {
    super();
}

public int keyCount(String keyString) {
    String key = keyString;
    int keyCountInt = 0;
    for(Map.Entry<String, Integer> entry : this.entrySet()) {
        if(entry.getKey() == keyString) {
            keyCountInt++;
        }
    }
    return keyCountInt;
}

public static void main(String[] args) {
    ExtendedHashMap ex = new ExtendedHashMap();
    ex.put("Item One", 5);
    ex.put("Item Three", 25);
    ex.put("Item Four", 35);
    ex.put("Item Two", 15);
    ex.put("Item One", 5);
    ex.put("Item Two", 15);
    ex.put("Item Three", 25);
    ex.put("Item Four", 35);
    System.out.println(ex.keyCount("Item One"));
}
}

如果你运行它,你会看到无论如何输出一个。 如果你注意到,键只有一个值,所以它排除了这一点。我怎样才能按原样输出值?

4 个答案:

答案 0 :(得分:2)

HashMap中不允许重复键。所以很明显,你只会得到一个作为答案!

只是为了记录,当您使用相同的键添加两个不同的值时,您将不会获得任何Excpetion。您的原始值将默默地被新值替换。尝试做

 ex.get("Item One");

您可能希望在Multimap上执行相同的操作。

答案 1 :(得分:1)

  
    

计算HashMap中有多少相同的键。

  

所有地图中的键都是唯一的。如果地图中的关键字计数将始终为 ONE 首先通过MAP的API。

  

地图不能包含重复的键;每个键最多可映射一个   值。

同样Map.html#entrySet()会返回一个java.util.Set类,该类不能包含任何重复元素。

答案 2 :(得分:1)

HashMap是一个键值对数据结构。而key是独一无二的。所以答案是一个

答案 3 :(得分:1)

我强烈建议你包装一个集合而不是扩展它。

这与

相同
public int keyCount(String keyString) {
    return containsKey(keyString) ? 1 : 0;
}

也许您考虑过MultiMap

public int keyCount(String keyString) {
    Collection coll = multiMap.get(keyString)
    return coll == null ? 0 : coll.size();

}

但是我怀疑MultiSet是你真正想要的

import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;

public class Inventory {
    private final Multiset<String> countingSet = ConcurrentHashMultiset.create();

    public void add(String key, int count) {
        countingSet.add(key, count);
    }

    public int keyCount(String keyString) {
        return countingSet.count(keyString);
    }

    public static void main(String[] args) {
        Inventory ex = new Inventory();
        ex.add("Item One", 5);
        ex.add("Item Three", 25);
        ex.add("Item Four", 35);
        ex.add("Item Two", 15);
        ex.add("Item One", 5);
        ex.add("Item Two", 15);
        ex.add("Item Three", 25);
        ex.add("Item Four", 35);
        System.out.println(ex.keyCount("Wooden Sword"));
        System.out.println(ex.keyCount("Item Three"));
    }
}

打印

0
50