我们对很多同类型的对象都有比较大小的需求,要实现这个功能,这两个对象必须是可比较的,为此Java提供了java.lang.Comparable接口。如果一个类实现了Comparable接口,那么该类的对象就定义了对象自然排序的规则,可以比较大小。
在JDK 1.5之后,Comparable接口声明如下:
这里的<T>表示使用了泛型。泛型,即“参数化类型”,顾名思义,就是将类型由原来具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用时传入具体的类型(类型实参)。
泛型是JDK 1.5之后引入的新特性。泛型的本质就是“数据类型的参数化”,可以理解为数据类型的一个占位符,告诉编译器,在使用泛型时必须传入实际的类型替换。JDK支持泛型类、泛型接口和泛型方法,使用时开发人员需要指定真实的数据类型,将运行时的类型检查提前到编译阶段,提高了类型的安全性。
在JDK 1.5之前,Comparable接口声明如下:
compare To方法的参数o是Object类型的,该引用可以指向任何对象。但是,如果一个对象调用该方法,而接收一个风马牛不相及的对象进行比较,这样的代码可以通过编译,但在运行时发现接收的对象类型不合适,两者无法比较。因此,JDK 1.5后采用泛型,限定传入的对象类型。
Comparable接口的compareTo方法用于判断此对象与指定对象o的顺序,如果此对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
【例4-14】(www.xing528.com)
定义一个Its Triangle2类,同时实现ItsGraph接口和Comparable接口。
Its Triangle2类的源代码如图4-33所示。
图4-33 ItsTriangle2类
显然,本例Its Triangle2类的compare To方法中比较的是它们的面积。当然,也可以根据需要制定其他的比较规则,例如比较它们的周长。
下面通过一个测试类Its Triangle Test2来演示实现了Comparable接口的类的对象比较功能,如图4-34所示。
图4-34 演示compareTo方法
实现Comparable接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序。强烈推荐使compareTo与equals保持一致,即对于某一个类的两个对象e1和e2来说,应当确保e1.compareTo(e2)==0与e1.equals(e2)具有相同的布尔值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。