Map和List的运用:

博主最近在学习Java,今天遇到这样一个体特和大家分享一下,题目如下:
在这里插入图片描述
在这里插入图片描述
这里就是考我们如何将用Map来统计,List来排序,
其中如何来构建Map和List是有一些讲究代码如下:

Map<String,Integer> map = new HashMap<>();
         List<String> list = new ArrayList<>();
         for(int i=0;i<n;i++){
             String s = sc.next();
             list.add(s);
         }
         for(String s: list){
             map.put(s,map.getOrDefault(s,0)+1);
         }

接下来是关键:
我们需要将Map的键值对转换为List。
核心代码如下:

//在把Map的键值对转换为List
         List<Map.Entry<String,Integer>>entries = new ArrayList<>(map.entrySet());
         entries.sort((e1,e2)->{
             int cnt = Integer.compare(e2.getValue(),e1.getValue());
             if(cnt!=0){
                 return cnt;
             }
             return e1.getKey().compareTo(e2.getKey());
         });

由上面的题目所知,我们想字符串以出现的频率从大到小来排列,平常的sort只是从小到大来排列,所以这里我们就需要来特意的排一下。
在entries.sort((e1,e2)中
int cnt = Integer.compare(e2.getValue(),e1.getValue());表示返回的值,当cnt大于0时,e2会排到e1前面,当cnt小于0时,e1会在e2前面,当cnt==0时,就开始比较字符序的大小,图中 return e1.getKey().compareTo(e2.getKey());
当返回的是负数时e1在e2前面,反之则反,理解方法(前面减后面)
当返回负数时就不变,返回正数时就减后面的提到前面来。

更多推荐