Arrays.sort在char数组自定义排序出现意外

Posted 秦枫-_-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arrays.sort在char数组自定义排序出现意外相关的知识,希望对你有一定的参考价值。

今天在写代码时,遇到了一个意外,对char数组自定义排序过程中,报错,按照Arrays.sort()写法我应该没写错

class Solution {
    public String frequencySort(String s) {
   HashMap<Character,Integer> map=new HashMap<>();
   for(int i=0;i<s.length();i++){
    map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
   }
      char []an=s.toCharArray();
   Collections.sort(an,new Comparator<Character>(){
       @Override
       public int compare(Character a,Character b){
           return map.get(b)-map.get(a);
       }
   });
   StringBuffer res=new StringBuffer();
   for(int i=0;i<an.length();i++){
       res.append(an[i]);
   }
   return res.toString();
    }
}

然后就报了一个错误:
在这里插入图片描述
后来网上发现有人跟我一样,也遇到了这个错误
在这里插入图片描述

原因如下:
在这里插入图片描述
我的解决思路:
把char数组换成列表List

class Solution {
    public String frequencySort(String s) {
   HashMap<Character,Integer> map=new HashMap<>();
   for(int i=0;i<s.length();i++){
    map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
   }
      List<Character> an=new ArrayList<>(map.keySet());
   Collections.sort(an,new Comparator<Character>(){
       @Override
       public int compare(Character a,Character b){
           return map.get(b)-map.get(a);
       }
   });
   StringBuffer res=new StringBuffer();
   for(int i=0;i<an.size();i++){
       for(int j=0;j<map.get(an.get(i));j++)
       res.append(an.get(i));
   }
   return res.toString();
    }
}

以上是关于Arrays.sort在char数组自定义排序出现意外的主要内容,如果未能解决你的问题,请参考以下文章

Arrays.sort()自定义排序的实现

集合-Java中Arrays.sort()自定义数组的升序和降序排序

sort方法和自定义比较器的写法

Java:使用sort方法对整个数组或部分数组进行排序的问题

Java中对数组升序排列用Arrays.sort( )方法,那降序排列用啥方法?

深入理解Arrays.sort() (转)