TreeMap排序详解(自然排序和自定义排序)

TreeMap排序详解(自然排序和自定义排序)-mikechen

TreeMap排序主要包含:TreeMap默认排序以及可以自定义排序,下面详解2种TreeMap排序。

1.TreeMap默认排序

在默认情况下,TreeMap会按照key的自然顺序进行排序,即对于数值类型,按照从小到大的顺序进行排序。

如下所示:

TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(3, "three");
treeMap.put(1, "one");
treeMap.put(2, "two");

当遍历TreeMap时,元素的顺序是:

1 -> "one"
2 -> "two"
3 -> "three"

在这个例子中,key的类型是Integer,TreeMap会按照key的自然顺序进行排序,即对于数值类型。

如果对于字符串类型,按照字典序进行排序。

在TreeMap中使用compareTo()方法来比较key的大小,如果key所属的类实现了Comparable接口,那么就可以直接使用TreeMap进行排序。

 

2.TreeMap自定排序

如果需要按照其他规则进行排序,可以使用自定义比较器。

比较器是一个实现了Comparator接口的类,它可以传递给TreeMap的构造函数,用来指定元素的排序规则。

如下所示:

TreeMap<Integer, String> treeMap = new TreeMap<>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return treeMap.get(o1).length() - treeMap.get(o2).length();
    }
});
treeMap.put(3, "three");
treeMap.put(1, "one");
treeMap.put(2, "two");

比较器的compare()方法返回的是两个元素的长度差,这样就可以按照value的长度进行排序了。

当遍历TreeMap时,元素的顺序是:

2 -> "two"
3 -> "three"
1 -> "one"

可以看到,元素按照value的长度从小到大进行排序了。

 

TreeMap排序小结

TreeMap默认按照key的自然顺序进行排序,如果需要按照其他规则进行排序,可以使用自定义比较器。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法