public class Testing {
public static void main(String[] args) {
HashMap<String, Double> map = new HashMap<>();
ValueComparator vc = new ValueComparator(map);
TreeMap<String, Double> sorted_map = new TreeMap<>(vc);
map.put("A", 432.3);
map.put("B", 44.3);
map.put("C", 46.3);
map.put("D", 43.3);
sorted_map.putAll(map);
System.out.println(map);
System.out.println(sorted_map);
}
}
class ValueComparator implements Comparator<String>{
private Map<String, Double> base;
public ValueComparator(Map<String, Double> base) {
this.base = base;
}
@Override
public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return 1;
}
return -1;
}
}
如果按照以上方法實現value排序
因爲compare做錯了,compare是比較key,而不是比較value。所以這種做法不會返回相符和的key,所以無法用key找到value。
只有這樣獲取value
Set<Entry<String, Double>> set = sorted_map.entrySet();
for (Entry<String, Double> i : set) {
System.out.println(i.getValue());
}
如果這樣實現接口
public int compare(String a, String b) {
return base.get(b).compareTo(base.get(a));
}
則map的value值不允許重複!