2016-07-16 9 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 

私はHashMapをソートターンにTreeMapComparatorを意味する値

答えて

2

に基づいてTreeMap内部Comparatorを、使用しています比較するキー。あなたの回避策は、基本的に地図に"red""green"が同じキーであることを伝え、その1つを落としました。

hereは値で地図を並べ替える方法がわかります。それは他の人を助ける場合

+0

私は説明のおかげで、これの背後に理由を得ることができませんでした。 – Akash

0

は、両方の値が等しい、すなわちである場合、メソッドはゼロを返す比較するかどうかを確認、比較する方法では、キーが落下避けるために、

を解決策を見つけたそうキーとリターンに並べ替え、

関連する問題