Java中Arrays.sort()自定义数组的升序和降序排序

Java学习中会遇到对数组进行升序或者降序排序的问题

Java语言提供给我们Array.sort(int [] arr)对数组进行升序排列

import java.util.Arrays;
public class Test1 {
    public static void main(String[] args) {
        int[] a = {4,6,8,2,1,4,9,2,4};
        Arrays.sort(a);
        for(int arr:a) {
            System.out.print(arr + " ");
        }
    }
}

想要进行降序排序呢?Java提供了很灵活的自定义的方法:

直接使用Arrays.sort()方法,无法比较,必须创建接口实现对象的比较

Comparable和Comparator都是用来实现对象的比较、排序

区别
Comparator位于java.util包下,而Comparable位于java.lang包下
Comparable接口的实现是在类的内部(如 String、Integer已经实现了Comparable接口,自己就可以完成比较大小操作),Comparator接口的实现是在类的外部(

可以理解为一个是自已完成比较,一个是外部程序实现比较)

实现Comparable接口要重写compareTo方法, 在compareTo方法里面实现比较

import java.util.Arrays;
import java.util.Comparator;

public class Test1 {
    public static void main(String[] args) {
        //注意,要想改变默认的排列顺序,不能使用基本类型(int,double, char)
        //而要使用它们对应的类
        Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        //定义一个自定义类MyComparator的对象
        Comparator cmp = new MyComparator();
        Arrays.sort(a, cmp );
        for(int i:a) {
            System.out.print(i+ "\t");
        }
    }
}
//Comparator是一个接口,所以这里我们自己定义的类MyComparator要implents该接口,而不是extends Comparator
class MyComparator implements Comparator {
    //如果o1小于o2,我们就返回正值,如果n1大于n2我们就返回负值,
    //这样颠倒一下,就可以实现反向排序了
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
}

运行结果如下

Java中Arrays.sort()自定义数组的升序和降序排序_第1张图片

你可能感兴趣的:(java)