今天在写代码时,遇到了一个意外,对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();
}
}