目录
前言
在实际应用中,我们往往有需要 比较两个自定义对象
大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的。所以 Java
中要 比较对象的大小
或者要 对对象的集合
进行排序,需要通过比较这些对象的某些属性的大小来确定它们之间的大小关系
一般 Java
中通过接口来实现两个对象的比较,比较常用就是 Comparable
接口和Comparator
接口
Comparable
接口
Comparable
接口使用场景
- 一个类实现了
Comparable
接口,就意味着该类支持排序
,如果存在实现Comparable
接口的类的List
集合或Array
数组,则该List
集合或Array
数组可以通过Collections.sort
或Arrays.sort
来进行排序 - 一个类实现了
Comparable
接口,就意味着该类支持两个对象比较大小
Comparable
接口源码
public interface Comparable<T> {
public int compareTo(T o);
}
Comparable
可以让实现它的类的对象进行比较,具体的比较规则是按照compareT()o
方法中的规则进行的,该方法的返回值有三种情况e1.compareTo(e2) > 0
即e1 > e2
e1.compareTo(e2) = 0
即e1 = e2
e1.compareTo(e2) < 0
即e1 < e2
实现 Comparable
接口示例
- 自定义类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ConsumInfo implements Comparable<ConsumInfo> {
private int uid;
private double price;
@Override
public int compareTo(@NotNull ConsumInfo o) {
if (price < o.price) {
return -1;
} else if (price > o.price) {
return 1;
} else {
return 0;
}
}
}
- 测试类:这里以对象的集合进行排序为例,当然也可以进行两个对象的大小比较
@Slf4j
public class ComparableTest {
public static void main(String[] args) {
ConsumInfo consumInfo1 = new ConsumInfo(100, 400.0);
ConsumInfo consumInfo2 = new ConsumInfo(200, 200.0);
ConsumInfo consumInfo3 = new ConsumInfo(300, 100.0);
ConsumInfo consumInfo4 = new ConsumInfo(400, 700.0);
ConsumInfo consumInfo5 = new ConsumInfo(500, 800.0);
ConsumInfo consumInfo6 = new ConsumInfo(600, 300.0);
ConsumInfo consumInfo7 = new ConsumInfo(700, 900.0);
ConsumInfo consumInfo8 = new ConsumInfo(800, 400.0);
List<ConsumInfo> list = new ArrayList<>();
list.add(consumInfo1);
list.add(consumInfo2);
list.add(consumInfo3);
list.add(consumInfo4);
list.add(consumInfo5);
list.add(consumInfo6);
list.add(consumInfo7);
list.add(consumInfo8);
log.info("排序前:------");
for (ConsumInfo consumInfo : list) {
log.info("consumInfo为:" + consumInfo);
}
// 排序
Collections.sort(list);
log.info("排序后:------");
for (ConsumInfo consumInfo : list) {
log.info("consumInfo为:" + consumInfo);
}
}
}
- 结果
00:16:09.316 [main] INFO org.example.test.ComparableTest - 排序前:------
00:16:09.332 [main] INFO org.example.test.ComparableTest - consumInfo为:ConsumInfo(uid=100, price=400.0)
00:16:09.332 [main] INFO org.example.test.ComparableTest - consumInfo为:ConsumInfo