预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Java语言入门教程(十七):Comparable与Comparator接口时间:2011-06-13csdn博客taomoon719 - 在实际开发中,我们常常需要对某些数据进行排序,这些数据往往使用数组或者集合保存。对于数组中的数据排序,API中提供了一个数组的工具类,java.util.Arrays,类中重载了大量的sort方法,可以对各种类型的数组进行排序。如对于Object类型数组排序有如下方法: publicstaticvoidsort(Object[]a) 假设有类Course,如下: packagecom.csst.relation; publicclassCourse{ privateStringtitle; privatedoubleprice; publicCourse(Stringtitle,doubleprice){ super(); this.title=title; this.price=price; } publicCourse(Stringtitle){ super(); this.title=title; } publicCourse(){ super(); } publicStringgetTitle(){ returntitle; } publicvoidsetTitle(Stringtitle){ this.title=title; } publicdoublegetPrice(){ returnprice; } publicvoidsetPrice(doubleprice){ this.price=price; } }如果有一个Course类型的数组,需要排序,按照Arrays类的方法,仿佛只要将数组作为参数,传递给sort方法即可。但是只要我们深入考虑一下,就会发现问题。对于Course对象,所谓的顺序应该有个排序标准,比如,按照价格排,还是名称排?这个排序标准确定了,才能对多个Course对象排序。 仔细阅读Arrays.sort方法的详细描述,会发现有一个要求,即使用该方法排序的对象,必须是Comparable类型的。Comparable是一个接口,只要Course类实现这个接口即可,覆盖其中的方法: publicintcompareTo(Objecto) 假设,我们希望Course数组根据price排序,那么将Course类实现Comparable接口,覆盖compareTo方法: publicintcompareTo(Objectarg0){ //TODOAuto-generatedmethodstub Coursec=(Course)arg0; if(this.price>c.price){ return1; }elseif(this.price>c.price){ return-1; }else{ return0; } } 初学者可以借助这个例子,理解一下接口的作用。接口Comparable定义了所有需要使用sort方法排序的对象的共同行为,否则sort方法根本无法实现。 如果Course数组可能根据价格排序,也可能需要根据名称排序,显然使用这个方法就有局限性,因为compareTo方法只可能实现一种比较逻辑。Arrays类中还有另外一种排序方法: publicstaticvoidsort(Object[]a,Comparatorc) Comparator是另一个接口,其中有一个方法: publicintcompare(Objecto1,Objecto2) 只要创建一个类,实现Comparator接口,实现compare方法,就可以进行排序,如下: packagecom.csst.relation; importjava.util.Comparator; publicclassPriceCompimplementsComparator{ publicintcompare(Objectarg0,Objectarg1){ //TODOAuto-generatedmethodstub Coursec1=(Course)arg0; Coursec2=(Course)arg1; if(c1.getPrice()>c2.getPrice()){ return1; }elseif(c1.getPrice()<c2.getPrice()){ return-1; }else{ return0; } } }有了这个实现类,使用Arrays.sort(Object[]o,Comparatorc)方法,即可以根据Comparator对象中的compare方法的比较算法进行排序。如果需要按照其他标准排序,只要重新写类,实现Comparator接口即可。 通过本篇的