2017-04-18 99 views
1

我正在使用哈希表實現一個包,並且我試圖計算我的哈希映射中元素的頻率,並且我一直得到的應該是一個小於它的值。計算哈希映射中元素的頻率

這是我的地圖

private Map <Integer, Integer> map = new HashMap<>(); 

這是我的add方法

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,不知道這是爲什麼,我很抱歉,如果這似乎是一個明顯的錯誤,我是新來的包實施

+0

你的地圖中的值代表什麼? –

+0

我不知道你爲什麼會返回k,而不是freE中的numE?我誤解了你的問題嗎?在你的測試中,地圖將是{4:1,5:2}。如果你正在尋找「2」,map.get(5)會返回它。 – leonz

回答

3

好吧,如果我理解你的問題你需要地圖中元素的值。所以如果你有一個地圖是{4:1,5:2},freq(5)應該是2,而freq(4)應該是1.我不確定你爲什麼使用Collections.frequency,檢查文檔該方法返回一個集合中的數值。因此,對於地圖中的任何鍵,它將返回1,因爲地圖不能包含重複的鍵。你需要的是:

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