TreeMap how does it sort

我与影子孤独终老i 提交于 2020-01-01 07:45:54

问题


How does the TreeMap sort? say for example you have the following map:

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

The output of this is:

Jesper = 3
Marc = 2
lol = 1

So if its not alphabetically what is it then?


回答1:


It is not only alphabetical, but it is also upper/down case sensitive.

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

Output:

Jesper = 3
Lol = 1
Marc = 2
jesper1 = 3
lol1 = 1
marc1 = 2

So, if you don't need it, you can use your custom comparator, and compare string in lower case:

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

Output:

Jesper = 3
jesper1 = 3
Lol = 1
lol1 = 1
Marc = 2
marc1 = 2



回答2:


As stated in the JavaDoc a TreeMap "...is sorted according to the natural ordering of its keys..." (emphasis is mine).

Thus your result is correct, in the light that lower case l is after uppercase M in the UTF "alphabet".

Should you wish to override the default behavior, you can supply a Comparator to the TreeMap constructor.




回答3:


As you did not pass any Comparator through the constructor, so this will construct a new TreeMap using the natural ordering of its keys.

In java the natural order means lexicographical order.




回答4:


you are in fact getting the correct output.

J(uppercase J)>M(uppercase M)>l(lowercase l). 

uppercase letters are lexcographically greater than lower case letters



来源:https://stackoverflow.com/questions/13642636/treemap-how-does-it-sort

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!