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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》