2013-10-28 195 views
-1

我正在爲我的服務器開發Minecraft Bukkit插件。我的部分插件需要用戶投票選擇地圖。當他們使用投票命令(例如/vote <mapnumber>)時,他們的投票存儲在HashMapString PlayernameInteger mapnumber)這是爲了檢測用戶是否已投票/想要爲新地圖投票。在HashMap中查找最常見的值

然後,我使用for循環將投票插入新的HashMapInteger MapnumberInteger Numberofvotes)。這是我難倒的地方。

我正在尋找一種方法來找出哪個Mapnumber的筆記最多。

+2

好了,忘記了一個事實,即它實際上是一個地圖 - 你有鍵/值對的集合,你想知道哪個鍵值最高。所以想想你該怎麼做,迭代序列並記住「迄今爲止見過的最好的...」 –

+1

[查找與Java地圖中的最大值關聯的密鑰]的重複(http:// stackoverflow。 com/questions/5911174 /發現密鑰與最大值在一個java映射) –

回答

0

建立哈希映射後,你可以建立另一個關鍵將是地圖編號和價值可能是頻率。然後,所有那些要做的就是找到最大頻率。

HashMap<Integer,Integer> freq_map = new HashMap<Integer,Integer>(); 

int map_no=0,fr; 
Iterator it = map.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pairs = (Map.Entry)it.next(); 
    map_no = pairs.getValue()); 
    if(map.contains(map_no)) fr = freq_map.get(map_no); 
    else fr = 0; 

    fr ++; 
    freq_map.put(map_no,fr); 
} 

// to find max 

int max = -1,temp; 
int result = -1; 
Iterator it = freq_map.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pairs = (Map.Entry)it.next(); 
    temp = pairs.getValue()); 

    if(temp>max){ 
     max = temp; 
     result = pairs.getKey(); 
    } 
} 

System.out.println("Highest frequency = "+result);   
+0

你應該看看[Java命名約定](http://www.oracle.com/ technetwork/JAVA/codeconv-138413.html)。 – sp00m

0

試試這個,它會給你投票數最高:

int maxNumberofVotes=(Collections.max(map.values()));