TreeMap 根据键降序排列
笔试题里面遇到一道题使用map存储然后按照键值降序输出可以很方便解决,但是之前不常使用java写算法题,所以不熟悉。后面查到使用TreeMap可以直接对键值对按照键值排序,但是默认的是升序。除了使用Java集合自定义的比较器来实现外,有个简单的方法就是使用java.util.TreeMap中descendingMap()来实现。具体如下:
// An highlighted block
public static Map sortMap(Map<Integer,Integer> m){
Map<Integer, Integer> sMap = new TreeMap<Integer,Integer>(m);
dataMap = ((TreeMap) sMap).descendingMap();
return sMap;
}
TreeMap是怎么实现自动排序的?
在java集合中,TreeSet集合和TreeMap集合底层数据结构都是自平衡二叉树,所以在这两个集合中添加元素的时候会实现自动排序,排序方式为中序排序(即左根右的方式进行排序),所以结果就是升序。
TreeMap具有如下特点:
- 不允许出现重复的key;
- 可以插入null键,null值;
- 可以对元素进行排序;
- 无序集合(插入和遍历顺序不一致);