步骤:
重写compareTo(Object obj)方法示例:和重写equals()方法思路类似
@Override
public int compareTo(Object o) {
//1.若实参对象和当前对象地址相同,则时同一个对象
if (o == this) {
return 0;
}
//2.若实参对象是当属于当前类或子类实例,则强转,声明比较规则
if (o instanceof A) {
// 强转
A p = (A)o;
// 比较规则:用参2与参1比较。小于return 负数,大于return 整数,相等return 0。
// 比较规则1,这里注意是谁的compare方法
int value = Double.compare(this.xxx,xxx);
// 比较规则2
if (value != 0) {
// 从小到大
// return value;
// 从大到小
return -value;
}
// 若比较规则1的结果相同,则使用该规则;从从小到大
return this.xxx.compareTo(p.xxx);
// 从大到小
// return -this.xxx.compareTo(p.xxx);
}
//3.若实参对象不属于当前类,则抛出类型异常
throw new RuntimeException("类型不匹配!");
// 使用示例
// Arrays.sort(arr实现类对象的实例)
}
因为以上两种情况的存在,我们可以临时的去指定排序方式,于是就有了Comparator。
步骤:
注意: Comparator的比较规则会覆盖Comparable的比较规则
//1.创建一个实现Comparator接口的实现类对象,这里使用了匿名实现类
Comparator comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
//2.若实参对象是当属于当前类或子类实例,则强转,声明比较规则
if(o1 instanceof A && o2 instanceof A){
// 强转
A p1 = (A) o1;
A p2 = (A) o2;
// 比较规则:用参2与参1比较。小于return 负数,大于return 整数,相等return 0。
// 从小到大
return Double.compareTo(p1.getXxx(),p2.getXxx());
// 从大到小
//return -Double.compareTo(p1.getXxx(),p2.getXxx());
}
//3.若实参对象不属于当前类,则抛出类型异常
throw new RuntimeException("类型不匹配!");
// 使用示例
// Arrays.sort(arr,comparator类A的实例);
}
}
角度一:
角度二:
角度三:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有