文章目录
  1. 1. 例子
  2. 2. 改进
  3. 3. Comparator 方法详解
  4. 4. 逆序比较器

例子

在刷leetcode时候,要用到给int的数组排序,于是很自然的想到用Arrays.sort来完成,然后很自然的写了下面这一段

1
2
3
4
5
6
7
8
9
public static int dominantIndex(int[] nums) {
Arrays.sort(nums,new Comparator<int>(){
@Override
public int compare(int o1, int o2) {
return 0;
}
});
return 1;
}

但是编译器一直报错,显示 Type argument cant be of primitive type。折腾了一会才发现这种排序方式不支持 int,double,char 等基本类型,所以报这个错,也是长时间不用都忘了有这个说法了。既然用到了下面讲一下该方式实现排序的正解。

改进

刚才这个任务是要完成对 int 类型的数组从大到小排序,这里直接调用排序api好像是不可以的,那么直接按正常排序后直接逆序取就好了。。。。

Comparator 方法详解

Comparator 是 java 的用于排序的接口,默认得实现一个 compare 函数,这个函数返回的参数有 -1 , 1 ,0 正常来说按照返回值为 -1 进行排序。
下面有一个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Test {
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 = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}

// Comparator是一个接口
//Comparator是一个比较器
//Comparator中的compare可以将传入进行比对,按照返回的参数大于(1)等于(0)小于(-1)进行排序
//默认情况下返回1的在后,返回-1的在前
//如果我们需要逆序,只要把返回值-1和1的换位置即可。
class MyComparator implements Comparator<Integer> {
public int compare(Integer o1, Integer o2) {
// 如果o1小于o2,我们就返回正值,如果n1大于n2我们就返回负值,
if (o1 < o2) {
return 1;
} else if (o1 > o2) {
return -1;
} else {
return 0;
}
}
}

逆序比较器

这里也可以利用Collections提供的reverseOrder()方法进行排序,具体的排序用法如下

1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String[] args) {
Integer[] A={10,23,42,12,20,6};
Arrays.sort(A,Collections.reverseOrder());
for(int a : A){
System.out.println(a);
}
}
}

文章目录
  1. 1. 例子
  2. 2. 改进
  3. 3. Comparator 方法详解
  4. 4. 逆序比较器