• TreeMap的排序


    概述

    Map是键值对的集合接口,它的实现类主要包括:HashMap、Hashtable以及LinkedHashMap等。

    1. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
    2. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。

    Map.Entry返回Collections视图。

    按key排序

    TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序。

    TreeMap默认按key升序排序

    public class T0 {
        public static void main(String[] args) {
            TreeMap treeMap = new TreeMap<>();
            treeMap.put(1, "a");
            treeMap.put(3, "b");
            treeMap.put(2, "c");
    
            for (Map.Entry item :
                    treeMap.entrySet()) {
                System.out.println(item);
            }
            Map.Entry entry = treeMap.firstEntry();
            System.out.println("entry = " + entry);
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    修改TreeMap的排序方式,按key降序排序

    实现方式是自定义Comparator,可以直接使用Comparator.reverseOrder()或者手动实现Comparator.

    new TreeMap<>(Comparator.reverseOrder())

    public class T1 {
        public static void main(String[] args) {
            Comparator keyComparator = new Comparator() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2.compareTo(o1);
                }
            };
    
            TreeMap treeMap = new TreeMap(keyComparator);
            treeMap.put(1, "a");
            treeMap.put(3, "b");
            treeMap.put(2, "c");
    
            for (Map.Entry item :
                    treeMap.entrySet()) {
                System.out.println(item);
            }
            Map.Entry entry = treeMap.firstEntry();
            System.out.println("entry = " + entry);
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    按Value排序

    以下只演示按TreeMap按Value升序排序,这同样适用于HashMap

    修改TreeMap的排序方式,按Value升序排序

    注意:正常情况下Map是不可以使用Collections.sort()方法进行排序的,不过可以将Map转换成list之后再进行排序。

    public class T2 {
        public static void main(String[] args) {
    
            Comparator> comparator = new Comparator>() {
                @Override
                public int compare(Map.Entry o1, Map.Entry o2) {
                    return o1.getValue().compareTo(o2.getValue());
                }
            };
    
            TreeMap treeMap = new TreeMap<>();
            treeMap.put(1, "a");
            treeMap.put(9, "e");
            treeMap.put(3, "b");
            treeMap.put(2, "c");
            ArrayList> list = new ArrayList>(treeMap.entrySet());
            Collections.sort(list, comparator);
    
            for (Map.Entry entry : list) {
                System.out.println(entry);
            }
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    本文由博客一文多发平台 OpenWrite 发布!

  • 相关阅读:
    微信小程序家政预约系统+后台管理系统
    sass基本使用总结
    资本方介入的第三方新能源充电桩平台到底“香”在哪里?
    外卖订单语音通知功能如何实现?(附外卖订单语音通知模板)
    【CSDN】5周年创作纪念日,不忘初心,砥砺前行。
    VLAN间路由:单臂路由与三层交换
    Spark
    Python中的几种推导式用法,先收藏再说......
    智能座舱架构与芯片- (13) 软件篇 下
    计算S=a+aa+…+aa…a
  • 原文地址:https://blog.csdn.net/ynkimage/article/details/133325985