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