java - Java - 使用Arrays.sort对字符数组进行排序

我尝试使用Arrays.sort函数对char数组进行排序,我使用了以下代码:


class Solution {


 public String customSortString(String S, String T) {


 Map<Character, Integer> poses = new HashMap<>(S.length());



 for(int i = 0 ; i < S.length() ; i++){


 poses.put(S.charAt(i), i);


 }



 char[] tmpArr = T.toCharArray();



 Arrays.sort(tmpArr , new Comparator<Character>(){ 



 @Override


 public int compare(Character c1, Character c2) { 


 Integer aPos = poses.get(c1);


 Integer bPos = poses.get(c2);



 if(aPos == null || bPos == null)


 return 0;



 return Integer.compare(aPos,bPos);


 } 


 });



 return new String(tmpArr);



 }


}



但是我收到了这个错误:


Error:(14, 19) java: no suitable method found for sort(char[],<anonymous java.util.Comparator<java.lang.Character>>)


 method java.util.Arrays.<T>sort(T[],java.util.Comparator<? super T>) is not applicable


 (inference variable T has incompatible bounds


 equality constraints: char


 upper bounds: java.lang.Character,java.lang.Object)


 method java.util.Arrays.<T>sort(T[],int,int,java.util.Comparator<? super T>) is not applicable


 (cannot infer type-variable(s) T


 (actual and formal argument lists differ in length))



我究竟做错了什么? 我该如何才能使这个工作?

时间:


char[] tmpArr = T.toCharArray();



有一个错误,你不能将premitives与comparator一起使用,你需要把它转换成Character[]

你可以使用Apache commons-lang执行类似下面的操作:


char[] charArray = str.toCharArray();


Character[] tmpArr = ArrayUtils.toObject(charArray);



这个是很好的转换方法。

字符[]的排序方法已经存在


 Arrays.sort(tmpArr);



public static void sort(T [] a ,comparator c )

根据指定比较器所引发的顺序对指定的对象数组排序。

你不能使用原语,比较器只能用于对象。

char是java中的基本数据类型,因此你应该将tmpArr更改为:


Character[] tmpArr = new Character[T.length()];



for (int i = 0; i < T.length(); i++) {


 tmpArr[i] = new Character(T.charAt(i));


}



...