为何Arrays.sort(arr, Collections.reverseOrder())反转char数组会失败?
问题原因分析
- Java 的
Arrays.sort方法针对不同类型的数组有不同的重载规则:- 对于
char、int、double这类基本数据类型的数组,Arrays.sort仅提供默认升序的无参排序方法,没有支持传入自定义比较器Comparator的重载。 - 对于
String等所有引用数据类型的数组,Arrays.sort提供了可传入自定义比较器的重载方法sort(T[] a, Comparator<? super T> c),可以实现包括倒序在内的自定义排序逻辑。
- 对于
- 出现报错的核心原因是泛型限制:
Collections.reverseOrder()返回的是泛型Comparator实例,而 Java 泛型不支持基本类型作为类型参数,因此基本类型数组无法匹配带比较器参数的sort重载,调用时就会直接报错。
补充实现方案
如果需要对 char 数组实现倒序排序,可以先调用无参 sort 完成升序排序,再手动反转数组即可,示例代码如下:
public static void main(String[] args) { char[] arr = new char[]{'a','b','c'}; // 先升序排序 Arrays.sort(arr); // 手动反转得到倒序结果 for (int i = 0; i < arr.length / 2; i++) { char temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; } }
内容的提问来源于stack exchange,提问作者Jonathan Su
相关产品推荐
相关产品推荐

