Java Map排序详解(2种主流排序方法)

Java Map排序详解(2种主流排序方法)-mikechen

Map介绍

Java Map常见的有:HashMapTreeMapLinkedHashMap

HashMap是最常用的Map,HashMap是:数组+链表+红黑树(JDK1.8增加了红黑树部分)的数据结构,如下所示:

Java Map排序详解(2种主流排序方法)-mikechen

Java Map集合框架中,除了HashMap以外,TreeMap也是常用到的Java集合对象。

TreeMap底层通过红黑树(Red-Black tree)实现,是一种平衡二叉树。

Java Map排序详解(2种主流排序方法)-mikechen

TreeMap默认是按升序排序,也可以指定排序的比较器,遍历TreeMap时,得到的记录是排过序的。

LinkedHashMap继承了HashMap类,它的多种操作都是建立在HashMap操作的基础上的,只是在原来的单链表的基础上改成了双向链表。

Java Map排序详解(2种主流排序方法)-mikechen

TreeMap排序

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。

如下所示:

public static void keyUpSort() {

// 默认情况,TreeMap按key升序排序

Map<String, Integer> map = new TreeMap<String, Integer>();

map.put("acb1", 5);

map.put("bac1", 3);

map.put("bca1", 20);

map.put("cab1", 80);

map.put("cba1", 1);

map.put("abc1", 10);

map.put("abc2", 12);

// 默认情况下,TreeMap对key进行升序排序

System.out.println("------------正常情况,TreeMap按key升序排序--------------------");

for (Map.Entry<String, Integer> entry : map.entrySet()) {

System.out.println(entry.getKey() + ":" + entry.getValue());

}

}

 

HashMap排序

HashMap本身是没有顺序的,不能直接对其进行排序

要排序只能先转成list然后对应list排序后,再转成LinkedHasHMap

这样做排序完全由自己定义,既可以多key排序也可以多value排序

private static void sortMapValue(){
    Map<String,String> map =new HashMap<>();
    map.put("a","2");
    map.put("c","5");
    map.put("d","6");
    map.put("b","1");
    List<Map.Entry<String,String>> lstEntry=new ArrayList<>(map.entrySet());
    Collections.sort(lstEntry,((o1, o2) -> {
        return o1.getValue().compareTo(o2.getValue());
    }));
    lstEntry.forEach(o->{
        System.out.println(o.getKey()+":"+o.getValue());
    });

    //如果一定要返回一个map,就new一个LinkedHashMap,将list中所有值依次put进去就可以
    /*LinkedHashMap<String,String> linkedHashMap=new LinkedHashMap<>();
    lstEntry.forEach(o->{
        linkedHashMap.put(o.getKey(),o.getValue());
    });*/

}

输出结果

b:1
a:2
c:5
d:6

陈睿mikechen

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

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

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

评论交流
    说说你的看法