这个类用来在对象之间进行排序,根据对象的某个属性进行。
1.Comparable接口
需要重写compareTo方法,然后自定义排序规则
在String和包装类内已经重写过这个方法了,可以直接调用
自定义类,使用继承Comparable接口
class goods implements Comparable{
String name;
int price;
public goods(String name , int price) {
this.name = name;
this.price = price;
}
@Override
public int compareTo(Object o) { 当使用泛型后,这里就不是object了,而是传入的泛型类型
goods i = (goods)o;
if(this.price > i.price) 基本定义规则
return 1; 大于的话就返回正数
else if(this.price < i.price)
return -1; 小于的话返回负数
else
return 0; 相等的话返回0
}
public String toString() {
return name+""+price;
}
}
public class Main{
public static void main(String[] args){
goods[] arr = new goods[5];
arr[0] = new goods("华为" , 3000);
arr[1] = new goods("小米" , 2000);
arr[2] = new goods("京东" , 1000);
arr[3] = new goods("淘宝" , 4000);
arr[4] = new goods("三星" , 5000);
Arrays.sort(arr); 会根据compareTo返回结果排序
System.out.println(Arrays.toString(arr));
输出结果:[京东1000, 小米2000, 华为3000, 淘宝4000, 三星5000]
}
}
2.Comparator接口
定制排序
属于临时性的,能使用第一个还是尽量使用
使用场合:
1.元素类型没有实现Comparable接口。而又不方便修改代码
2.类已经实现的Comparable的方法不适合项目需求
只需要修改上面代码的sort即可
Arrays.sort(arr , new Comparator() {
@Override
public int compare(Object o, Object o1) { 当使用泛型后,这里就不是object了,而是传入的泛型类型
goods i = (goods)o;
goods i1 = (goods)o1;
return -i.compareTo(i1); 也可以自己定义if语句,设置返回值
}});
新增的默认方法
一般lambda表达式时用
- 逆序 •reversed()
- 比较器链 当前面比较想的时,用第二个比较器比较 •thenComparing()