0

所以我一直在尝试编写一个采用 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

4 回答 4

2

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

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

 ex.get("Item One");

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

于 2013-09-06T11:44:00.200 回答
1

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

键在所有地图中都是唯一的。如果密钥在 Map 中,则计数将始终为ONE首先通过MAP 的 API 。

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

Map.html #entrySet()还返回一个java.util.Set不能包含重复元素的类。

于 2013-09-06T11:43:34.133 回答
1

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

于 2013-09-06T11:45:33.310 回答
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
于 2013-09-06T11:47:15.843 回答