Java比较器
用来解决引用数据类型的大小比较
两种方法:comparable(自然排序),comparator(定制排序)
实现Comparable接口
步骤:
1.实现Comparable接口
2.重写compareTo,指定比较对象大小的标准
public class product implements Comparable{
private String name;
private int price;
。。。。
//specify how to determine the size of current object
//e.g.: according to price from high to low
@Override
public int compareTo(Object o) {
if (this == o){return 0;}
if(o instanceof product){
product p = (product) o;
int value = Double.compare(this.price,p.price);
if(value!=0){
return value;
}
return this.name.compareTo(p.name);
}
throw new RuntimeException();
}
}
product[] arr = new product[4];
arr[0] = new product("a",2222);
arr[1] = new product("b",222222);
arr[2] = new product("c",3333);
arr[3] = new product("d",3333);
Arrays.sort(arr);
for(product i : arr){
System.out.println(i);
}
//product{name='a', price=2222}
//product{name='c', price=3333}
//product{name='d', price=3333}
//product{name='b', price=222222}
实现Comparator
使用场景:
1.当元素的类型没有实现Comparable接口,又不方便修改代码时。
实现步骤:
1.创建一个实现了Comparator接口的实现类
2.实现类要求重写Comparator中的compare方法
我感觉这两个的区别就是一个写外面,一个写里面。
product[] arr = new product[4];
arr[0] = new product("a",2222);
arr[1] = new product("b",222222);
arr[2] = new product("c",3333);
arr[3] = new product("d",3333);
Comparator comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof product && o2 instanceof product){
product p1 = (product) o1;
product p2 = (product) o2;
return Double.compare(p1.getPrice(),p2.getPrice());
}
throw new RuntimeException();
}
};
Arrays.sort(arr,comparator);
for(product i : arr){
System.out.println(i);
}