2016-07-16 65 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; 
}