Java编译报错:Arrays.sort(int[], Comparator)无适配方法问题咨询
为什么
Arrays.sort(int[], Comparator)编译报错? 嘿,这个问题其实是Java里Arrays.sort方法重载的一个常见坑,我来给你拆解清楚:
首先得明确Java的Arrays.sort有两类核心重载:
- 一类是给
*基本类型数组*(比如int[]、double[])用的,这类方法没有Comparator参数,只能按自然顺序排序——因为基本类型不是对象,没法用基于对象的Comparator接口。 - 另一类是给
*对象类型数组*(比如Integer[]、String[],甚至int[][])用的,这类方法支持传入Comparator自定义排序逻辑,因为数组本身就是Object的子类,符合泛型T[]的要求。
回到你的代码场景:
- 你要排序的
intIdx是int[],属于*基本类型数组*,但你调用了带Comparator的Arrays.sort方法——这个方法只接受对象类型数组,编译器找不到匹配的重载,就抛出了你看到的那个“no suitable method found”错误。 - 而当你排序
int[][] intervals时,int[][]本质是*对象类型数组*(每个元素是int[],而数组是Object的实例),所以它完美适配带Comparator的重载方法,编译自然就通过了。
怎么解决这个问题?
如果想给你的索引数组自定义排序,只需要把int[]转换成Integer[](包装类型数组)就行,示例代码如下:
public int[] findRightInterval(int[][] intervals) { int n = intervals.length; Integer[] intIdx = new Integer[n]; // 改成包装类型数组 for(int i=0;i<n;i++) { intIdx[i]=i; } Arrays.sort(intIdx, (a, b) -> (intervals[a][0]-intervals[b][0])); // 后续如果需要转回int[],可以用下面的代码 int[] resultIdx = Arrays.stream(intIdx).mapToInt(Integer::intValue).toArray(); ... }
内容的提问来源于stack exchange,提问作者Justin Lin
相关产品推荐
相关产品推荐

