Java中map容器分别根据键key和值value进行排序的总结

map中根据键key来进行排序

  • 根据键key来进行排序比较容易,我们只需要使用map中的Treemap就可以实现,它会根据key值的自然顺序来进行排序。
  • 下面用一个示例来进行说明演示,给定一串全部是小写字符的字符串,要求它能够按照字符的顺序输出各个字母出现了多少次。
public class javaPractice {
    public static void main(String[] args) {
        String str="aaassssbb";
        //map函数的用法,根据key进行排序,,用TreeMap
        TreeMap<Character,Integer> map=new TreeMap<Character, Integer>();
        int len=str.length();
        for(int i=0;i<len;++i){
            Integer value=map.get(str.charAt(i));
            int count=0;
            if(value!=null){
                count=value;
            }
            count++;  //自增
            map.put(str.charAt(i),count);
        }
        System.out.println(map.toString());
    }
}
  • 结果
    在这里插入图片描述

map中根据值value来进行排序

  • 根据map的值value排序就没有直接的容器供我们使用了,我们可以先创建一个Hashmap将数据先存储进去,然后将map集合转到list集合中,这里我们用ArrayList,然后通过Collections.sort(List I,Comparator c)方法来进行排序。
  • 下面通过一个示例来进行演示,还是上面的问题,这次我们根据字母出现的次数由多到少来进行排序value,当然value可能会相同,这时候根据key的顺序排序,就可以将Hashmap用为Treemap,或者comparator中进行调整。
public class javaPractice {
    public static void main(String[] args) {
        String str="aaaddssssbb";
        //map函数的用法,根据value进行排序,先声明一个HashMap
        HashMap<Character,Integer> map=new HashMap<Character, Integer>();
        int len=str.length();
        for(int i=0;i<len;++i){
            Integer value=map.get(str.charAt(i));
            int count=0;
            if(value!=null){
                count=value;
            }
            count++;  //自增
            map.put(str.charAt(i),count);
        }
        //将map集合转到list集合中去,list用Arraylist来实现
        List<Map.Entry<Character,Integer>> list=new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());
        //通过Collection.sort(List I,Comparator c)方法来进行排序,代码如下
        Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                return o2.getValue()-o1.getValue();
            }
        });
        //用foreach循环进行输出
        for(Map.Entry<Character,Integer> a :list){
            System.out.println(a.getKey()+":"+a.getValue());
        }
    }
}
  • 结果:
    在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜程序设计

您的打赏将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值