【发布时间】:2017-09-14 23:22:19
【问题描述】:
我正在使用 hashmap 实现一个包,我正在尝试计算我的 hashmap 中一个元素的频率,但我一直比它应该的少一个。
这是我的地图
private Map <Integer, Integer> map = new HashMap<>();
这是我的添加方法
public void add(int element) {
//containsKey
//checks if the element is already there
if (map.containsKey(element)){
Integer numElt = map.get(element);
map.put(element, (numElt+1)); //line where it should increment number of keys if the element is already there
count++;
}
else {
map.put(element, 1);
count++;
}
}
和我的频率
public int freq(int element) {
Integer numE = map.get(element);
int k = Collections.frequency(map.values(), numE);
return k;
}
如果我这样写我的测试
Bag b = new Bag():
b.add(4)
b.add(5)
b.add(5)
assertTrue(2, b.freq(5))
应该返回 2,但它返回 1。不知道为什么会这样,如果这似乎是一个明显的错误,我很抱歉,我是 bag 实现的新手
【问题讨论】:
-
地图中的值代表什么?
-
我不知道你为什么要返回 k 而不是 freq 中的 numE?我误解了你的问题吗?在您的测试中,地图将是 {4 : 1, 5 : 2}。如果您正在寻找“2”,map.get(5) 会返回它。