Я пытаюсь отсортировать вывод HashMap
, используя LinkedHashMap
и TreeMap
.
Когда я использую TreeMap
для сортировки HashMap
, это работает как шарм.
Map<Integer, String> hMap = new HashMap<Integer, String>();
hMap.put(40, "d");
hMap.put(10, "a");
hMap.put(30, "c");
hMap.put(20, "b");
System.out.println(" ");
System.out.println("before");
for (Map.Entry m1 : hMap.entrySet()) {
System.out.print(m1.getKey() + " " + m1.getValue() + " ");
}
System.out.println("after");
Map<Integer, String> hTree = new TreeMap<Integer, String>(hMap);
for (Map.Entry m2 : hTree.entrySet()) {
System.out.print(m2.getKey() + " " + m2.getValue() + " ");
}
Выход:
before
20 b 40 d 10 a 30 c<br>
after
10 a 20 b 30 c 40 d
Но когда я пытаюсь с помощью LinkedHashMap
отсортировать HashMap
, это, похоже, не работает.
Map<Integer, String> hMap = new HashMap<Integer, String>();
hMap.put(10, "a");
hMap.put(20, "b");
hMap.put(30, "c");
hMap.put(40, "d");
System.out.println("before");
for (Map.Entry m1 : hMap.entrySet()) {
System.out.print(m1.getKey() + " " + m1.getValue() + " ");
}
System.out.println(" ");
System.out.println("after");
LinkedHashMap<Integer, String> lhMap = new LinkedHashMap<Integer, String>(hMap);
Iterator it = lhMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry me = (Map.Entry) it.next();
System.out.print(me.getKey() + " " + me.getValue()+" ");
}
Выход:
before
20 b 40 d 10 a 30 c
after
20 b 40 d 10 a 30 c
Может кто-нибудь сказать мне, почему эта сортировка не работает? Это потому что LinkedHashMap
фильтрует HashMap
?
Если это так, почему TreeMap
невосприимчив к этой проблеме?
Спасибо