You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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] + "]");
        }
    }
}

核心逻辑说明

两种写法的核心逻辑完全一致:

  1. 优先比较数组的第一个元素(col1),若结果不为0(即col1值不同),直接返回该比较结果;
  2. 只有当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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:02:03