Java HashMap排序(按Key排序和按Value排序)

HashMap按Value排序

import java.util.*;

public class HashMapSort {
    private static void mapValueSort(HashMap<String, Integer> labelsMap) {
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(labelsMap.entrySet());
        list.sort(new Comparator<Map.Entry<String, Integer>>() {
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o1.getValue() < o2.getValue() ? 1 : ((o1.getValue() == o2.getValue()) ? 0 : -1);
            }
        });
        for (Map.Entry<String, Integer> mapping : list) {
            System.out.println(mapping.getKey() + ":" + mapping.getValue());
        }
    }

    public static void main(String[] args) {
        HashMap<String, Integer> wordMap = new HashMap<String, Integer>() {{
            //value为key的长度
            put("这是苹果园", 5);
            put("这是苹果", 4);
            put("她上街买了一个苹果", 9);
            put("他吃了一个苹果", 7);
            put("苹果", 2);
        }};
        mapValueSort(wordMap);
    }
}

输出:

她上街买了一个苹果:9
他吃了一个苹果:7
这是苹果园:5
这是苹果:4
苹果:2

 

HashMap按Key排序


import java.util.*;

public class HashMapSort {
    private static void mapKeySort(HashMap<Integer, String> labelsMap) {
        List<Map.Entry<Integer, String>> list = new ArrayList<Map.Entry<Integer, String>>(labelsMap.entrySet());
        list.sort(new Comparator<Map.Entry<Integer, String>>() {
            public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
                return o1.getKey() < o2.getKey() ? 1 : ((o1.getKey() == o2.getKey()) ? 0 : -1);
            }
        });
        for (Map.Entry<Integer, String> mapping : list) {
            System.out.println(mapping.getKey() + ":" + mapping.getValue());
        }
    }

    public static void main(String[] args) { 
        HashMap<Integer, String> wordMap2 = new HashMap<Integer, String>() {{
            //key为value的长度
            put(5, "这是苹果园");
            put(4, "这是苹果");
            put(9, "她上街买了一个苹果");
            put(7, "他吃了一个苹果");
            put(2, "苹果");
        }};
        mapKeySort(wordMap2);
    }
}

输出

9:她上街买了一个苹果
7:他吃了一个苹果
5:这是苹果园
4:这是苹果
2:苹果

若想按值作升序排序,仅将compare中的语句

return o1.getKey() < o2.getKey() ? 1 : ((o1.getKey() == o2.getKey()) ? 0 : -1);

修改为:

return o1.getKey() < o2.getKey() ? -1 : ((o1.getKey() == o2.getKey()) ? 0 : 1);

即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值