计算哈希图中元素的频率
calculating frequency of an element in hashmap
我正在使用 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))
应该 return 2 但它是 returning 1。不知道为什么会这样,如果这看起来像是一个明显的错误,我很抱歉我是包实现的新手
好的,如果我理解您的问题,您需要地图中某个元素的值。因此,如果您的地图是 {4 : 1, 5 : 2},则 freq(5) 应为 2,freq(4) 应为 1。我不确定您为什么使用 Collections.frequency,请检查文档,该方法 returns 集合中值的数量。因此对于地图中的任何键,它将 return 1,因为地图不能包含重复的键。你需要的是:
public int freq(int element) {
return map.get(element);
}
我正在使用 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))
应该 return 2 但它是 returning 1。不知道为什么会这样,如果这看起来像是一个明显的错误,我很抱歉我是包实现的新手
好的,如果我理解您的问题,您需要地图中某个元素的值。因此,如果您的地图是 {4 : 1, 5 : 2},则 freq(5) 应为 2,freq(4) 应为 1。我不确定您为什么使用 Collections.frequency,请检查文档,该方法 returns 集合中值的数量。因此对于地图中的任何键,它将 return 1,因为地图不能包含重复的键。你需要的是:
public int freq(int element) {
return map.get(element);
}