Java中如何按二维数组指定行排序且另一行保持元素配对?
Java二维数组按指定行配对排序实现方案
问题核心原因
你直接调用Arrays.sort(arr[1])仅对第二行独立排序,不会关联第一行同列的配对元素,因此会丢失原始的对应关系。
实现思路
把同一列的两个元素作为绑定整体,通过索引排序的方式保证配对关系不变,排序依据为第二行的元素值:
- 初始化和列数等长的索引数组,存储所有列的原始下标
- 对索引数组自定义排序,排序规则为对比两个索引对应第二行元素的大小
- 按照排序后的索引顺序,重组两行的元素即可
完整可运行代码
import java.util.Arrays; import java.util.Comparator; public class SortTwoRowArray { public static void main(String[] args) { // 初始化原始数组 int[][] arr = new int[2][8]; arr[0] = new int[]{1, 1, 3, 1, 5, 3, 7, 1}; arr[1] = new int[]{5, 2, 4, 8, 3, 7, 5, 2}; int columnNum = arr[0].length; // 构建索引数组 Integer[] columnIndexes = new Integer[columnNum]; for (int i = 0; i < columnNum; i++) { columnIndexes[i] = i; } // 按第二行元素值升序排序索引 Arrays.sort(columnIndexes, Comparator.comparingInt(index -> arr[1][index])); // 按排序后的索引重组数组 int[] newRow0 = new int[columnNum]; int[] newRow1 = new int[columnNum]; for (int i = 0; i < columnNum; i++) { newRow0[i] = arr[0][columnIndexes[i]]; newRow1[i] = arr[1][columnIndexes[i]]; } arr[0] = newRow0; arr[1] = newRow1; // 输出结果 System.out.println("第一行:" + Arrays.toString(arr[0])); System.out.println("第二行:" + Arrays.toString(arr[1])); } }
运行输出
第一行:[1, 1, 5, 3, 1, 7, 3, 1] 第二行:[2, 2, 3, 4, 5, 5, 7, 8]
内容的提问来源于stack exchange,提问作者Young
相关产品推荐
相关产品推荐

