首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TreeMap它是如何排序的

TreeMap它是如何排序的
EN

Stack Overflow用户
提问于 2012-11-30 17:49:13
回答 4查看 55.1K关注 0票数 18

TreeMap是如何排序的?例如,假设您有以下映射:

代码语言:javascript
复制
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();
}

此命令的输出为:

代码语言:javascript
复制
Jesper = 3
Marc = 2
lol = 1

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-30 17:53:12

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

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
Jesper = 3
Lol = 1
Marc = 2
jesper1 = 3
lol1 = 1
marc1 = 2

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

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
Jesper = 3
jesper1 = 3
Lol = 1
lol1 = 1
Marc = 2
marc1 = 2
票数 33
EN

Stack Overflow用户

发布于 2012-11-30 17:53:55

As stated in the JavaDoc a TreeMap "...is根据其keys的自然顺序排序...“(重点是我的)。

因此你的结果是正确的,因为在字母表中,小写的l在大写的M之后。

如果您希望覆盖默认行为,可以为TreeMap构造函数提供一个Comparator

票数 6
EN

Stack Overflow用户

发布于 2012-11-30 17:53:16

因为您没有通过构造函数传递任何Comparator,所以这将使用键的自然顺序构造一个新的TreeMap

在java中,自然顺序指的是lexicographical顺序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13642636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档