【问题标题】:sorting 2d array using build in sort function使用内置排序功能对二维数组进行排序
【发布时间】:2020-04-11 00:02:30
【问题描述】:

我使用 Arrays.sort() 函数对二维数组(int[][] 数组)进行排序。因为我想根据第一个元素对其进行排序。例如,{{2,3},{1,4}} 基于第一个元素,数组将为 {{1,4},{2,3}}。所以我重写了比较函数。

Arrays.sort(arr, new Comparator<int[]>() {

    @Override
    public int compare(int[] o1, int[] o2){
        if(o1[0] < o2[0]){
            return -1;
        } else if (o1[0] > o2[0]) {
            return 1;
        } else {
            return 0;
        }
    }

})

我知道这种工作。但我不明白这个比较是如何工作的。 我在想

new Comparator<int[]>  

应该是

new Comparator<int[][]>

因为这是二维数组。比较函数内部应该是比较

o1[0][0]  and  o2[0][0]

谁能帮我理解一下?

这也是使用 Arrays.sort,我可以使用 Collections.sort 吗?有什么不同?

谢谢

【问题讨论】:

  • 仅供参考:要通过比较两个 int 值来获得比较值,请使用 Integer.compare(o1[0], o2[0])

标签: java sorting


【解决方案1】:

请记住,Java 中实际上并不存在“二维数组”,因此您真正要处理的是“int[] 的数组”(本质上并没有阻止每个 int[] 成为不同的数组)长度)。

所以:当您进行排序时,您将“int[] 数组”中的各个元素相互比较,并且因为每个元素都是一个 int[],所以您的比较器也适用于 int[]

【讨论】:

    【解决方案2】:

    您在 sort 方法中传递数组并给它一个比较器。 Arrays.sort 将使用迭代器传递给 compare 方法。所以比较方法是检查 arr[0].compare(arr[1]) 的元素,对这两个进行排序并转到下一个迭代器。同样的概念也适用于二维数组。您只是传递了 2 个数组并告诉比较应该将谁放在哪里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2015-09-17
      • 2013-08-17
      • 2015-09-16
      • 2018-06-21
      相关资源
      最近更新 更多