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

Java如何基于关联数组的降序对目标数组实现单行排序?

问题解答

给出的单行代码无法实现需求,原因很明确:Java的Arrays.sort(T[], Comparator<? super T>)方法中,Comparator接收的参数是数组中的元素值,而非元素在数组中的索引。

拿你的示例来说,原数组a = [2,5,4,3],排序时Comparator里的i和j是a数组的具体元素(比如第一次比较的是2和5),此时c[j]相当于去访问c[5]——你的c数组长度只有4,这直接会抛出数组越界异常,完全达不到按c数组降序排序a的目的。

正确的实现方式

如果你想尽量简洁地实现需求,可以通过索引数组排序的方式,既不用复杂的额外结构,也能保证关联关系正确:

// 生成索引数组
Integer[] indices = IntStream.range(0, a.length).boxed().toArray(Integer[]::new);
// 按c数组的降序对索引排序
Arrays.sort(indices, (i, j) -> Integer.compare(c[j], c[i]));
// 根据排序后的索引重新构建a数组
a = Arrays.stream(indices).mapToInt(idx -> a[idx]).toArray();

执行后a数组就会变成[5,2,3,4],和你预期的结果一致。

如果想用更紧凑的写法,也可以把逻辑合并(可读性稍弱):

a = IntStream.range(0, a.length)
             .boxed()
             .sorted((i, j) -> Integer.compare(c[j], c[i]))
             .mapToInt(idx -> a[idx])
             .toArray();

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:26:09