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如果它不是按字母顺序排列的,那么它是什么?
发布于 2012-11-30 17:53:12
它不仅按字母顺序排列,而且区分大小写。
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发布于 2012-11-30 17:53:55
As stated in the JavaDoc a TreeMap "...is根据其keys的自然顺序排序...“(重点是我的)。
因此你的结果是正确的,因为在字母表中,小写的l在大写的M之后。
如果您希望覆盖默认行为,可以为TreeMap构造函数提供一个Comparator。
发布于 2012-11-30 17:53:16
因为您没有通过构造函数传递任何Comparator,所以这将使用键的自然顺序构造一个新的TreeMap。
在java中,自然顺序指的是lexicographical顺序。
https://stackoverflow.com/questions/13642636
复制相似问题