You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:57:39