
本文介绍使用 `arrays.sort()` 配合链式 `comparator` 对 int 类型二维数组按第一列主排序、第二列次排序的完整实现方法,并附可运行示例与关键注意事项。
在 Java 中,对二维数组(如 int[][])按多个维度排序,核心思路是将每行视为一个整体对象,并通过 Comparator 定义复合比较逻辑。推荐使用函数式风格的链式比较器:先按第 0 列(arr[i][0])升序排序,当该列值相等时,再按第 1 列(arr[i][1])升序排序。
以下是完整、可直接运行的示例代码:
import java.util.Arrays;
import java.util.Comparator;
public class MultiColumnSort {
public static void main(String[] args) {
int[][] arr = {
{1, 7},
{2, 6},
{3, 9},
{4, 1},
{5, 3},
{6, 7}
};
// 主键:col0(升序),次键:col1(升序)
Arrays.sort(arr, Comparator.comparingInt(row -> row[0])
.thenComparing(row -> row[1]));
System.out.println(Arrays.deepToString(arr));
// 输出:[[1, 7], [2, 6], [3, 9], [4, 1], [5, 3], [6, 7]]
}
} ✅ 关键说明:
- Comparator.
comparingInt(...) 显式指定泛型类型,避免类型推断失败; - thenComparing(...) 支持任意数量的后续比较器(如需三列排序,可继续链式调用);
- 所有操作原地修改数组,不创建新数组;
- 若需降序,可用 reversed()(如 comparingInt(...).reversed())或 thenComparingInt(...).reversed()。
⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- 确保每行长度 ≥ 2,否则运行时可能抛出 ArrayIndexOutOfBoundsException;
- 若存在 null 行,需提前过滤或自定义 nullsFirst()/nullsLast() 处理;
- 此方法仅适用于引用类型数组(int[][] 是合法的,因 int[] 是引用类型),不可用于原始一维数组(如 int[])本身排序。
掌握链式 Comparator 是 Java 函数式排序的核心技能,既简洁又具备高度可扩展性。










