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的元素是升序。

java arrays.sort java arrays.sort comparator_升序

 

 

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