Java中先按col1再按col2排序二维数组的方法(含Comparator实现)
Java二维数组按多列排序(先col1后col2)的实现方法
首先明确需求:对如下二维数组,先按col1(数组第一个元素)升序排序,当col1值相同时,再按col2(数组第二个元素)升序排序。
待排序数组示例:
int[][] arr = { {1, 7}, {2, 6}, {3, 9}, {4, 1}, {5, 3}, {6, 7} };
方法一:匿名内部类实现Comparator(Java 8之前写法)
通过重写Comparator的compare方法,明确多列排序的优先级逻辑:
import java.util.Arrays; import java.util.Comparator; public class Sort2DArray { public static void main(String[] args) { int[][] arr = { {1, 7}, {2, 6}, {3, 9}, {4, 1}, {5, 3}, {6, 7} }; // 自定义排序规则:先比col1,col1相等再比col2 Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { // 先比较第一列 int col1Result = Integer.compare(o1[0], o2[0]); if (col1Result != 0) { return col1Result; } // 第一列相等时,比较第二列 return Integer.compare(o1[1], o2[1]); } }); // 打印排序结果 for (int[] row : arr) { System.out.println("[" + row[0] + ", " + row[1] + "]"); } } }
方法二:Java 8+ 简洁写法(Lambda + Comparator链式调用)
利用Java 8引入的Lambda表达式和Comparator静态方法,简化代码结构:
import java.util.Arrays; import java.util.Comparator; public class Sort2DArray { public static void main(String[] args) { int[][] arr = { {1, 7}, {2, 6}, {3, 9}, {4, 1}, {5, 3}, {6, 7} }; // 链式调用定义排序优先级:col1优先,其次col2 Arrays.sort(arr, Comparator.comparingInt(row -> row[0]) .thenComparingInt(row -> row[1])); // 打印排序结果 for (int[] row : arr) { System.out.println("[" + row[0] + ", " + row[1] + "]"); } } }
核心逻辑说明
两种写法的核心逻辑完全一致:
- 优先比较数组的第一个元素(col1),若结果不为0(即col1值不同),直接返回该比较结果;
- 只有当col1值相等时,才会触发第二列(col2)的比较,从而实现先col1、后col2的排序优先级。
测试结果说明
原数组的col1本身已是升序状态,若存在col1相同的元素(比如添加[6,5]),排序后会自动按col2升序排列,输出会变成:
[1, 7] [2, 6] [3, 9] [4, 1] [5, 3] [6, 5] [6, 7]
内容的提问来源于stack exchange,提问作者Shivam Taneja
相关产品推荐
相关产品推荐

