2016-07-16 103 views
0
public class Solution { 

    public static void main(String[] args) { 

    HashMap<String,Integer> hm = new HashMap<>(); 

    hm.put("red",23); 
    hm.put("orange",1); 
    hm.put("yellow",32); 
    hm.put("green",23); 

    TreeMap<String,Integer> tm = new TreeMap<>(new ValueComparator(hm)); 
    tm.putAll(hm); 

    for(String key : tm.keySet()) 
     System.out.println(key+" "+tm.get(key)); 

    } 
} 

class ValueComparator implements Comparator<String>{ 

    Map<String, Integer> map; 

    public ValueComparator(Map<String, Integer> map){ 
    this.map =map; 
    } 

    public int compare(String a, String b){ 
    return map.get(b).compareTo(map.get(a)); 
    } 

} 

問題:它正確地根據值進行排序,但刪除重複值。可以請某人指出原因。Java TreeMap基於值去除重複值的排序

電流輸出:

yellow 32 
red 23 
orange 1 

預期輸出:

yellow 32 
red 23 
green 23 
orange 1 

我已經使用Comparator內部TreeMap,這又排序HashMap基於值

回答

2

一個TreeMapComparator是指比較。你的解決方法基本上告訴地圖"red""green"是相同的關鍵,​​因此它放棄了其中的一個。

您可以查看here瞭解如何按值排序地圖。

+0

感謝您的解釋,我無法得到背後的原因。 – Akash

0

找到一個解決辦法,如果它幫助了別人,

爲了避免按鍵越來越下降了,在比較的方法,檢查是否兩個值相等,即比較方法返回零,如果是排序上的按鍵和返回,

public int compare(String a, String b){ 
    int compare = map.get(a).compareTo(map.get(b)); 
    if (compare == 0) { 
     compare = a.compareTo(b); 
    } 
    return compare; 
}