Java常用类—比较器
介绍说明
Java中的对象,正常情况下只能比较: == 或 != , 不能使用 > 或 <
但是在开发场景中,我们需要对多个对象进行排序,我们需要对多个对象进行排序,言外之意就是需要比较对象的大小
使用comparator或者comparable
Comparable接口的使用举例:
1.String、包装类都实现了Comparable接口,重写了compareTo(obj)方法,给出比较两个对象的方法
2.String、包装类重写compareTo()方法以后,进行了从小到大的排列
3.重写compareTo的规则:当前对象大于obj返回正整数,小于返回负整数,等于返回零
自定义类实现Comparable接口来做到自然排序
- 对于自定义类来说,如果需要排序 Arrays.sort(数组名) ,我们可以让自定义类实现Comparable接口和compareTo(obj)方法
package com.jayerlisten.test;
/**
* @author JayerListen
* @create 2022-05-08 2022/5/8
*/
public class Goods implements Comparable{
private String name;
private double price;
public Goods(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Goods{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
@Override
public int compareTo(Object o) {
if(o instanceof Goods){
Goods goods =(Goods)o;
if(this.price > goods.getPrice()){
return 1;
}else if(this.price < goods.getPrice()){
return -1;
}else{
return -this.name.compareTo(goods.getName());
}
}else{
throw new RuntimeException("传入参数的类型异常!");
}
}
}
使用Comparator来实现定制排序
- 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了Java.lang.Comaparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator对象来排序
- 重写compare(Object o1,Object o2)方法,比较o1和o2的大小
如果o1大于o2返回正数
如果o1小于o2返回负数
如果o1等于o2返回0
Arrays.sort(arr, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
//重写代码
return 0;
}
});
Comparable接口和Comparator类的使用对比:
- Comparable接口在实现之后,固定在类中比较永久的使用比较
- Comparator类的对象在实现后传入参数中,使用匿名对象则属于临时性的比较