很多情况下,我们需要对一个数组进行自定义排序,就可以使用 Comparator 接口。

Comparator 接口

Comparator 接口的定义以及常用的方法如下:

1
2
3
public interface Comparator<T> {
int compare(T o1, T o2);
}

compare 方法用来比较两个对象的顺序,方法返回值有 3 种情况:

  • o1 < o2:返回 -1
  • o1 == o2:返回 0
  • o1 > 02:返回 1

当返回结果为正数时,需要交换 o1,o2 的次序

示例

使用 Comparator 接口对数组排序

1
2
3
4
5
6
7
public static void main(String[] args) {  
List<Integer> list = Arrays.asList(3, 1, 2, 99, -1);
// 使用了 lambda 表达式,从大到小排序
list.sort((a, b) -> b - a);
System.out.println(list);
}
// [99, 3, 2, 1, -1]

如果对两个 int 型变量进行判断,可以使用 Integer.compare(int a, int b)

  • 如果 ,则返回 1
  • 如果 ,则返回 -1
  • 如果 ,则返回 0

如果使用 lambda 表达式 (a, b) -> a - b 来判断大小,会存在整数溢出的问题导致判断错误.