计算hashmap中元素的频率

时间:2017-04-18 23:14:22

标签: java hashmap bag

我正在使用hashmap实现一个包,我正在尝试计算我的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)) 

}

如果我这样写我的测试

center

应该返回2,但它会返回1.不知道为什么会这样,如果这似乎是一个明显的错误,我很难对包实现

1 个答案:

答案 0 :(得分:3)

好的,如果我理解你的问题,你想要一个元素在地图中的价值。所以,如果你的地图是{4:1,5:2},则freq(5)应为2,freq(4)应为​​1.我不确定你为什么使用Collections.frequency,查看文档,该方法返回集合中的值的数量。因此,对于地图中的任何键,它将返回1,因为地图不能包含重复键。你需要的是:

public int freq(int element) {
    return map.get(element);
}