在我学习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
答案 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方法进行排序。