Given the code fragment:



public class Foo {

    public static void main(String[] args) {
        Map<Integer, String> unsortMap = new HashMap<>();
        unsortMap.put(10, "z");
        unsortMap.put(5, "b");
        unsortMap.put(1, "d");
        unsortMap.put(7, "e");
        unsortMap.put(50, "j");
        Map<Integer, String> treeMap = new TreeMap<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        });
        treeMap.putAll(unsortMap);
        for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
            System.out.print(entry.getValue() + " ");
        }
    }
}

What is the result?

A. A compilation error occurs.

B.

d b e z j

C.

j z e b d

D.

z b d e j

題解

TreeMap實作了SortedMap介面,所以存在TreeMap的項目元素是經過排序的。在實體化TreeMap物件的時候可以傳入自訂的Comparator物件來決定項目元素間比較大小的方式,但排序的依據是項目的key,而不是value。在這個題目中型態為Integer的key,比較大小的方式為反序排列,也就是說,數值愈大的會愈在前面。例如:1會在0之前,2會在1之前。

所以這題答案為選項C。