使用比较器对Treemap按照key进行排序

来源:互联网 发布:知乎周刊 plus 下载 编辑:程序博客网 时间:2024/05/13 20:10

使用比较器对Treemap按照key进行排序

一.理论准备

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。    TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。    HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。    Map.Entry返回Collections视图    key排序    TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:

方式一

public class MapSortDemo {    public static void main(String[] args) {        Map<String, String> map = new TreeMap<String, String>();        map.put("KFC", "kfc");        map.put("WNBA", "wnba");        map.put("NBA", "nba");        map.put("CBA", "cba");        Map<String, String> resultMap = sortMapByKey(map);  //按Key进行排序        for (Map.Entry<String, String> entry : resultMap.entrySet()) {            System.out.println(entry.getKey() + " " + entry.getValue());        }    }    /**     * 使用 Map按key进行排序     * @param map     * @return     */    public static Map<String, String> sortMapByKey(Map<String, String> map) {        if (map == null || map.isEmpty()) {            return null;        }        Map<String, String> sortMap = new TreeMap<String, String>(                new MapKeyComparator());        sortMap.putAll(map);        return sortMap;    }}

比较器类

class MapKeyComparator implements Comparator<String>{    @Override    public int compare(String str1, String str2) {        return str1.compareTo(str2);    }}

方式二:

public class TreeMapTest {    public static void main(String[] args) {        Map<String, String> map = new TreeMap<String, String>(                new Comparator<String>() {                    public int compare(String obj1, String obj2) {                        // 降序排序                        return obj2.compareTo(obj1);                    }                });        map.put("b", "ccccc");        map.put("d", "aaaaa");        map.put("c", "bbbbb");        map.put("a", "ddddd");        Set<String> keySet = map.keySet();        Iterator<String> iter = keySet.iterator();        while (iter.hasNext()) {            String key = iter.next();            System.out.println(key + ":" + map.get(key));        }    }}        运行结果如下:d:aaaaac:bbbbbb:ccccca:ddddd
原创粉丝点击