Java排序数组基于三列

时间:2011-11-10 10:37:27

标签: java arrays sorting

在我学习Java的过程中,我遇到了一个疑问。

为了排序一维数组,我们可以使用Arrays.sort()但是如果我想根据三列对二维数组进行排序?是否有任何选择,或者我必须为自己编写代码(类似三个嵌套循环)?

以下是输入示例:

13  2   28  36  
1   4   56  17  
4   2   5   40  
2   4   41  55  
9   5   48  12  
19  2   25  12  
20  5   13  8   
15  3   51  30  
12  5   39  59  
17  3   56  40  
3   1   56  46  
7   3   28  51  
8   5   14  58  
5   3   34  15  
14  4   53  2   
18  4   38  57  
6   2   16  25  
16  3   17  13  
10  5   41  33  
11  1   13  57  

列是int,它存储在一个int数组中。

我想按第2列排序,如果找到相同的数字,则按第3列排序,最后,如果找到等号,则按第3列排序。

输出应为:

11  1   13  57  
3   1   56  46  
4   2   5   40  
6   2   16  25  
19  2   25  12  
13  2   28  36  
16  3   17  13  
7   3   28  51  
5   3   34  15  
15  3   51  30  
17  3   56  40  
18  4   38  57  
2   4   41  55  
14  4   53  2   
1   4   56  17  
20  5   13  8   
8   5   14  58  
12  5   39  59  
10  5   41  33  
9   5   48  12  

这样做有简单的方法吗? 请记住,我是Java的新手。

的问候,

Favolas

4 个答案:

答案 0 :(得分:2)

简单使用Comparator并使用Arrays.sort(arr, comparator);

答案 1 :(得分:1)

这取决于您获取数据的方式。

一般情况下,您可以将自己的Comparator提供给Collections.sort

答案 2 :(得分:1)

使用下面的比较器

class MyArrayComparator implements Comparator<Integer[]> {

  @Override
  public int compare(Integer[] o1, Integer[] o2) {
    if (o1[1] == o2[1]) {
      if (o1[2] == o2[2]) {
        return o1[3].compareTo(o2[3]);
      }
      else {
        return o1[2].compareTo(o2[2]);
      }
    }
    return o1[1].compareTo(o2[1]);
  }

}

使用以下排序方法

Collections.sort(yourListOfArry, new MyArrayComparator());

答案 3 :(得分:0)

在数组数组上实现Comparator对我来说似乎有点危险,因为你必须手动确保第二维中的所有数组都具有相同的长度,并且数组的组件的语义必须完全相同时间 - 对于这些约束,应该使用对象。

如果数组中的第二个维度有一些含义(即它总是四个,因为三个是坐标,第四个是值),你应该考虑不将它建模为一个数组数组,而是一个四个数组的对象成员变量(例如xCoord,yCoord,zCoord和value)。然后,您可以使此类实现Comparable接口并实现compareTo方法。然后Arrays.sort()方法将根据给定的compareTo方法进行排序。