【Java】Java的HashMap按key排序和按value排序的实现

前言

  1. HashMap的储存是没有顺序的,而是按照key的HashCode实现。
  2. 直接输出HashMap得到的是一个无序Map。

1.按key排序

方式一:将哈希表的键(得到HashMap中键的集合(keySet))转化为数组,使用Arrays.sort()进行排序

public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("ddd",1);
        map.put("aaa",3);
        map.put("bbb",4);
        map.put("ccc",2);

        // 按key排序
        // 获取哈希表的键
        Set set=map.keySet();
        // 将哈希表的键,转化为对象数组
        Object []arr= set.toArray();
        // 此时可以使用sort进行排序
        Arrays.sort(arr);
        // 通过map.get(key)得到键对应的值
        for (Object key:arr){
            System.out.println(key+","+map.get(key));
        }
    }

方式二:将entrySet转换为List,然后重写比较器,使用Collections.sort()进行排序

 public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("ddd",1);
        map.put("aaa",3);
        map.put("bbb",4);
        map.put("ccc",2);

        // 将map的entrySet放入list集合中
        List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());

        // 对哈希表的键进行排序
        // 对list进行排序,并通过Comparator传入自定义的排序规则
        // 因为键为String类型,所以使用compareTo函数
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o1.getKey().compareTo(o2.getKey());
            }
        });

        // 使用for循环对list中键值对元素进行遍历
        for (int i=0;i<list.size();i++){
            Map.Entry<String,Integer> mmap=list.get(i);
            System.out.println(mmap.getKey()+","+mmap.getValue());
        }
    }

结果:
aaa,3
bbb,4
ccc,2
ddd,1

2.按value排序

方式一:将entrySet转换为List,然后重写比较器

 public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("ddd",1);
        map.put("aaa",3);
        map.put("bbb",4);
        map.put("ccc",2);

        // 将map的entrySet放入list集合中
        List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());
        
        // 对哈希表的值进行排序
        // 对list进行排序,并通过Comparator传入自定义的排序规则
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o1.getValue()-o2.getValue();
            }
        });

        // 用迭代器对list中的键值对元素进行遍历
        Iterator<Map.Entry<String,Integer>> iterator=list.iterator();
        while(iterator.hasNext()){
            Map.Entry<String,Integer> ite= iterator.next();
            System.out.println(ite.getKey()+","+ite.getValue());
        }
    }

结果:
ddd,1
ccc,2
aaa,3
bbb,4

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值