treeMap實現value排序後無法get(key)取值

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值不允許重複!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章