使用实现Comparator接口:
排序时只需要在sort方法中传入要排序的数组和一个比较器对象即可
import java.util.*;
public class Main {
static Comparator<Integer> comm = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 注意,要想改变默认的排列顺序,不能使用基本类型(int,double, char)
Integer[] arr = {1,5,4,3,9,6};
//static来规定
Arrays.sort(arr,comm);
//自定义类来规定
Arrays.sort(arr, new com());
for(int aa:arr)
System.out.println(aa);
}
}
class com implements Comparator<Integer> {
@Override
public int compare(Integer i1, Integer i2) {
return i2.compareTo(i1);
}
}
也可以直接在sort方法中传入java中提供的逆序比较器
Collections.reverseOrder();
API的解释:
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。(自然顺序是通过对象自身的 compareTo 方法强行排序的。)此方法允许使用单个语句,以逆自然顺序对实现了 Comparable 接口的对象 collection(或数组)进行排序(或维护)。例如,假设 a 是一个字符串数组。那么:
Arrays.sort(a, Collections.reverseOrder());
将按照逆字典(字母)顺序对数组进行排序。
返回的比较器是可序列化的。
所以可以这么写
//Collections.sort()对列表排序,Arrays.sort()对数组排序
public class Test {
public static void main(String[] args) {
Integer[] arr = {1,5,4,3,9,6};
Arrays.sort(arr,Collections.reverseOrder());
for(int aa: arr){
System.out.println(aa);
}
}
}