TreeMap如何排序

Mar*_*sen 15 java sorting treemap

怎么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();
}
Run Code Online (Sandbox Code Playgroud)

这个输出是:

Jesper = 3
Marc = 2
lol = 1
Run Code Online (Sandbox Code Playgroud)

那么,如果它不按字母顺序排列它是什么呢?

kor*_*ero 31

它不仅是按字母顺序排列的,而且还是大写/小写区分大小写.

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);
Run Code Online (Sandbox Code Playgroud)

输出:

Jesper = 3
Lol = 1
Marc = 2
jesper1 = 3
lol1 = 1
marc1 = 2
Run Code Online (Sandbox Code Playgroud)

因此,如果您不需要它,您可以使用自定义比较器,并以小写字母比较字符串:

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);
Run Code Online (Sandbox Code Playgroud)

输出:

Jesper = 3
jesper1 = 3
Lol = 1
lol1 = 1
Marc = 2
marc1 = 2
Run Code Online (Sandbox Code Playgroud)

  • `new Comparator&lt;String&gt;() { public int compare(String o1, String o2) { return o1.compareToIgnoreCase(o2); } }` (3认同)

And*_*rup 5

正如JavaDoc中所述,TreeMap"......根据其的自然顺序进行排序......"(重点是我的).

因此,你的结果是正确的,在较低的情况下,光l大写M的UTF"字母表".

如果您希望覆盖默认行为,可以ComparatorTreeMap构造函数提供.