Java TreeMap它是如何排序的

Java TreeMap它是如何排序的,java,sorting,treemap,Java,Sorting,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.Entr

树映射如何排序?例如,假设您拥有以下地图:

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();
}

所以,如果不是按字母顺序,那么它是什么?

它不仅按字母顺序,而且区分大小写

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);
所以,如果您不需要它,您可以使用自定义比较器,并以小写形式比较字符串:

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);

由于没有通过构造函数传递任何
比较器
,因此这将使用其键的自然顺序构造一个新的
树映射


在java中,自然顺序意味着词典编纂的顺序。

您实际上得到了正确的输出

J(uppercase J)>M(uppercase M)>l(lowercase l). 
大写字母在词法上比小写字母大

,因为
树形图
“…是根据其键的自然顺序排序的”(重点是我的)

因此,您的结果是正确的,因为在UTF“字母表”中,小写字母
l
位于大写字母
M
之后


如果希望覆盖默认行为,可以向
树映射
构造函数提供
比较器

新建比较器(){public int compare(String o1,String o2){return o1.compareToIgnoreCase(o2);}
Java8:
新建树映射((o1,o2)->o1.CompareTogenoreCase(o2))
它不仅是大写/小写字母,而且在词典方面也是如此。所以最好通过比较器。
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
J(uppercase J)>M(uppercase M)>l(lowercase l).