TreeMap按Value升序排序

map转list:  List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());

list转map : 只能for循环转 或者参考  https://blog.csdn.net/linsongbin1/article/details/79801952

 

TreeMap和LinkedHashMap是有序的(TreeMap默认 Key 升序,LinkedHashMap则记录了插入顺序)

1>  修改TreeMap的排序方式,按key降序排序
public static void keyDownSort() {

    // TreeMap,按key降序排序
    // 降序排序比较器
    Comparator<String> keyComparator = new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            // TODO Auto-generated method stub
            return o2.compareTo(o1);
        }
    };

    Map<String, Integer> map = new TreeMap<String, Integer>(keyComparator);
    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);

    System.out.println("------------TreeMap按key降序排序--------------------");
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

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

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

// 默认情况,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);

// 升序比较器
Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String,Integer>>() {
   @Override
   public int compare(Map.Entry<String, Integer> o1,
                  Map.Entry<String, Integer> o2) {
      // TODO Auto-generated method stub
      return o1.getValue()-o2.getValue();
   }
};

// map转换成list进行排序
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());

// 排序
Collections.sort(list,valueComparator);

// 默认情况下,TreeMap对key进行升序排序
System.out.println("------------map按照value升序排序--------------------");
for (Map.Entry<String, Integer> entry : list) {
   System.out.println(entry.getKey() + ":" + entry.getValue());
}

https://blog.csdn.net/yangyutong0506/article/details/78190245

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值