这是一个外部比较器,对应的是Comparable。B是使类自带排序功能(方法重写中往往是this和参数的比较),而T往往附加使用。
B对应compare方法,T对应compareTo方法
为什么return a-b就完了?
因为返回值为int,使用 正/负/0 来代表 大了/小了/相等
演变
- 老实实现接口
MyComparator myComparator = new MyComparator();
class MyComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
return 0;
}
}
- 匿名内部类(语法糖)
Comparator<Object> comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return 0;
}
};
- lamda
由于本质是函数式接口,所以连匿名类都不需要
Integer [] array=new Integer[4];
Arrays.sort(array,(a,b)->{
return a-b;
});
//注意不能是int 因为要使用到泛型
注意的两个点
- 接口不能new,这里纯粹是语法糖
- 虽然Comparator中很多方法,但那些都是新特性,本质还是只有一个方法
网友评论