目录

一、使用equals方法进行比较

1.1 覆写equals方法

1.2 缺点

二、使用CompareTo方法让类具备比较大小的能力

2.1 若要让一个类具备可以比较大小的能力,让该类实现java.lang.Compareble接口,覆写CompareTo方法

2.2 缺点

三、使用java.util.Comparator接口实现不同类型的比较器

3.1 定义一个比较器

3.2 如何使用定义好的比较器?

一、使用equals方法进行比较

当同一个自定义类型的两个不同对象的进行比较时

使用equals方法(Object类提供的),默认方法就是在比较地址

如果想要进行对象内属性值的比较,则需要在类中覆写equals方法

1.1 覆写equals方法

ios 比较对象 比较对象大小_java

ios 比较对象 比较对象大小_java_02

1.2 缺点

equals方法只能比较是否相等,无法进行大小的比较,也就无法进行排序

二、使用CompareTo方法让类具备比较大小的能力

2.1 若要让一个类具备可以比较大小的能力,让该类实现java.lang.Compareble接口,覆写CompareTo方法

ios 比较对象 比较对象大小_ios 比较对象_03

JDK会根据返回值对两个对象的大小进行比较

>0 :  当前对象大于传入的对象

<0 :当前对象小于传入的对象

=0 :当前对象等于传入的对象

ps:此时进行排序的话就是按照成绩的大小进行升序排列,如果想要进行按照成绩的大小进行降序排列,只需要改变一下返回值

ios 比较对象 比较对象大小_java_04

 当前Student类实现了Compareable接口,就具备了可比较大小的能力,也就可以进行大小的排序

ios 比较对象 比较对象大小_java_05

 因为覆写CompareTo方法时是让两个对象的score属性进行比较,所以进行打印输出时,就是按照成绩的高低进行排序

2.2 缺点

使用compareTo方法,同一时刻只能有一种排序方式,需要来回修改代码来进行排序方式的变动

三、使用java.util.Comparator<T>接口实现不同类型的比较器

要比较的类本身并不实现这个接口,实现了Comparator接口的类就表示作为该类的比较器

3.1 定义一个比较器

ios 比较对象 比较对象大小_覆写_06

3.2 如何使用定义好的比较器?

ios 比较对象 比较对象大小_开发语言_07

 Student类本身并不实现任何比较的接口,Student对象的大小比较交给专门进行比较的类来进行大小比较,专业的事情让专业的人来做!!!

通过传入不同的比较器就可以实现不同规则的排序方式

无论如何比较,对原来的Student类不产生任何影响,而且不同比较器之间也相互不影响

核心理念:一个程序应当对拓展开放,对修改关闭