二维数组排序需将数组展平为一维数组或转置后按行排序:按行排序:使用 arrays.sort() 方法对展平的一维数组进行排序。按列排序:转置数组后按行排序,再恢复为原始形状。自定义排序:使用自定义比较器按特定条件对元素进行比较。
如何对二维数组进行排序
入门
对二维数组进行排序是指根据特定条件对数组中的元素进行重新排列。可以根据行或列进行排序,排序方法有多种。
按行排序
要按行对二维数组进行排序,可以使用 Arrays.sort() 方法。该方法对一维数组进行排序,因此需要将二维数组转换为一维数组。可以使用 Java.util.stream.Stream 将二维数组展平为一维数组,然后对其进行排序:
int[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; Arrays.stream(array) // 将二维数组展平为流 .flatMapToInt(Arrays::stream) // 将每行展平为 IntStream .sorted() // 排序 .forEach(System.out::println); // 打印排序后的元素
按列排序
要按列对二维数组进行排序,需要将数组转置。转置是指将行和列互换。转置后的数组可以按行排序,然后恢复为原始形状:
int[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 转置数组 int[][] transposedArray = new int[array[0].length][array.length]; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[0].length; j++) { transposedArray[j][i] = array[i][j]; } } // 按行对转置后的数组排序 Arrays.sort(transposedArray, (a, b) -> Integer.compare(a[0], b[0])); // 恢复原始形状 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[0].length; j++) { array[i][j] = transposedArray[j][i]; } }
自定义排序
也可以使用自定义比较器对二维数组进行排序。自定义比较器允许根据特定条件对元素进行比较。例如,可以按元素的和对数组进行排序:
class SumComparator implements Comparator<int[]> { @Override public int compare(int[] a, int[] b) { return Integer.compare(Arrays.stream(a).sum(), Arrays.stream(b).sum()); } } Arrays.sort(array, new SumComparator());