TreeMap
怎么排序?例如,你有以下地图:
TreeMap<String, Integer> treemap = new TreeMap<>();
treemap.put("lol", 1);
treemap.put("Marc", 2);
treemap.put("Jesper", 3);
Iterator ittwo = treemap.entrySet().iterator();
while (ittwo.hasNext()) {
Map.Entry pairs = (Map.Entry)ittwo.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
ittwo.remove();
}
这个输出是:
Jesper = 3
Marc = 2
lol = 1
那么,如果不是按字母顺序排列它是什么呢?
答案 0 :(得分:29)
它不仅是按字母顺序排列的,而且还是大写/小写敏感。
TreeMap<String, Integer> treemap = new TreeMap<String, Integer>();
treemap.put("Lol", 1);
treemap.put("Marc", 2);
treemap.put("Jesper", 3);
treemap.put("lol1", 1);
treemap.put("marc1", 2);
treemap.put("jesper1", 3);
输出:
Jesper = 3
Lol = 1
Marc = 2
jesper1 = 3
lol1 = 1
marc1 = 2
因此,如果您不需要它,您可以使用自定义比较器,并以小写字母比较字符串:
TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.toLowerCase().compareTo(o2.toLowerCase());
}
});
treemap.put("Lol", 1);
treemap.put("Marc", 2);
treemap.put("Jesper", 3);
treemap.put("lol1", 1);
treemap.put("marc1", 2);
treemap.put("jesper1", 3);
输出:
Jesper = 3
jesper1 = 3
Lol = 1
lol1 = 1
Marc = 2
marc1 = 2
答案 1 :(得分:5)
作为stated in the JavaDoc,TreeMap
“按照键的自然顺序排序......”(重点是我的)。
因此,您的结果是正确的,因为在UTF“字母表”中大写l
之后,小写M
。
如果您希望覆盖默认行为,可以向Comparator
构造函数提供TreeMap
。
答案 2 :(得分:2)
由于你没有通过构造函数传递任何Comparator
,所以这将使用其键的自然顺序构造一个新的TreeMap
。
在java中,自然顺序表示lexicographical
顺序。
答案 3 :(得分:1)
你实际上得到了正确的输出。
J(uppercase J)>M(uppercase M)>l(lowercase l).
大写字母在字典上大于小写字母