如何用Java对二维数组按首元素、次元素依次排序?
二维数组二级排序解决方案
针对你需要实现的先按子数组首元素升序,首元素相同时按次元素升序的需求,可以通过Java的Arrays.sort()配合自定义比较器实现,以下是具体代码和说明:
修正原始数组语法问题
注意你提供的原始数组中{10 6}存在语法错误,缺少逗号,正确写法应为{10, 6},否则无法编译。
完整实现代码
匿名内部类写法(兼容Java 8之前版本)
import java.util.Arrays; import java.util.Comparator; public class ArraySortDemo { public static void main(String[] args) { int[][] array = {{4, 7}, {4, 1}, {14, 11}, {10, 6}, {13, 4}, {4, 10}, {10, 3}, {9, 14}}; // 自定义排序规则 Arrays.sort(array, new Comparator<int[]>() { @Override public int compare(int[] subArr1, int[] subArr2) { // 第一步:比较子数组的首元素 int firstCompare = Integer.compare(subArr1[0], subArr2[0]); if (firstCompare != 0) { // 首元素不同,直接返回比较结果 return firstCompare; } // 第二步:首元素相同时,比较次元素 return Integer.compare(subArr1[1], subArr2[1]); } }); // 输出排序后的数组 for (int[] subArr : array) { System.out.println("{" + subArr[0] + ", " + subArr[1] + "}"); } } }
Lambda表达式简化写法(Java 8及以上版本)
如果使用Java 8或更高版本,可以用Lambda表达式简化比较器代码:
import java.util.Arrays; public class ArraySortDemo { public static void main(String[] args) { int[][] array = {{4, 7}, {4, 1}, {14, 11}, {10, 6}, {13, 4}, {4, 10}, {10, 3}, {9, 14}}; // 简化的Lambda排序规则 Arrays.sort(array, (subArr1, subArr2) -> { int firstCompare = Integer.compare(subArr1[0], subArr2[0]); return firstCompare != 0 ? firstCompare : Integer.compare(subArr1[1], subArr2[1]); }); // 输出结果 for (int[] subArr : array) { System.out.println("{" + subArr[0] + ", " + subArr[1] + "}"); } } }
实现原理
Arrays.sort()方法接收数组和Comparator接口实现类,通过自定义compare()方法定义排序逻辑。- 先比较两个子数组的首元素:如果结果不为0(即首元素不同),直接返回该结果,实现首元素的升序排序。
- 若首元素相同,则比较两个子数组的次元素,返回比较结果,实现次元素的升序排序。
运行上述代码后,输出结果将与你期望的排序结果完全一致。
内容的提问来源于stack exchange,提问作者Mr. Zhao
相关产品推荐
相关产品推荐

