java中有这样一个方法可以帮助我们实现数组的自定义排序:Arrays类的public static <T> void sort(T[] a, Comparator<? super T> c)
我们只需要实现Comparator接口,也就是实现其中的compare方法,在该方法中按照自己希望的规则来编写排序。
compare方法的完整声明是这样的:
public int compare(int[] o1, int[] o2)
也就是说,参数只支持一维数组。但需要注意的是,数组o1、o2并不是我们传入的数组的哪部分,而是一个指代,o1、o2这个一维数组中的元素指的是要比较的元素的下标,o1的下标为0的元素对应传入数组的下标为0的元素,o1的下标为1的元素对应传入数组的下标为1的元素,以此类推。
返回o1的元素减o2的元素是升序,返回o2的元素减o1的元素是升序。
package com.ex.greedy;
import java.util.Arrays;
import java.util.Comparator;
public class test {
public static void main(String[] args) {
int[][] arr={{1,4,5},{2,5,3},{1,2,3},{5,4,3},{1,4,3}};
//让数组按照这样的顺序排序:优先按第一个元素排,如果第一个元素相等,就按照第二个元素排,如果第二个元素也相等的话,就按照第三个元素排。都要升序。
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0]!=o2[0]){
return o1[0]-o2[0];
}else {
if (o1[1]!=o2[1]){
return o1[1]-o2[1];
}else {
return o1[2]-o2[2];
}
}
}
});
//输出结果
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
输出结果:
1 2 3
1 4 3
1 4 5
2 5 3
5 4 3