Treemap的自定义排序方式


莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。-- 苏轼【定风波】

1. TreeMap按照key进行排序

TreeMap<Integer,Integer> map1 = new TreeMap<Integer,Integer>();  //默认的TreeMap升序排列
TreeMap<Integer,Integer> map2= new TreeMap<Integer,Integer>(new Comparator<Integer>(){
             /* 
             * int compare(Object o1, Object o2) 返回一个基本类型的整型, 
             * 返回负数表示:o1 小于o2, 
             * 返回0 表示:o1和o2相等, 
             * 返回正数表示:o1大于o2。 
             */  
            public int compare(Integer a,Integer b){
                return b-a;            
            }
            });

2. TreeMap按照value进行排序

TreeMap底层是根据红黑树的数据结构构建的,默认是根据key的自然排序来组织(比如integer的大小,String的字典排序)。
所以,TreeMap只能根据key来排序,是不能根据value来排序的(否则key来排序根本就不能形成TreeMap)。
今天有个需求,就是要根据treeMap中的value排序。所以网上看了一下,大致的思路是把TreeMap的EntrySet转换成list,然后使用Collections.sor排序。


ps: 上面一大堆话的意思 就是将map放入list 中排序


代码:

 Map<String,String> map = new TreeMap<String,String>();
        map.put("a", "dddd");
        map.put("d", "aaaa");
        map.put("b", "cccc");
        map.put("c", "bbbb");

   List<Entry<String, String>> list = new ArrayList<Entry<String, String>>(map.entrySet());
        
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1, Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
        });
  for (Entry<String, String> e: list) {
            System.out.println(e.getKey()+":"+e.getValue());
        }

CompareTo方法的简单介绍

CompareTo:方法主要可以对 Byte, Double, Integer, Float, Long 或 Short 类型的参数 进行比较:
指定的数与参数相等返回 0;
指定的数小于参数返回-1;
指定的数大于参数返回1;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM