快速业务通道

Java语言入门教程(十七):Comparable与Comparator接口 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

Java语言入门教程(十七):Comparable与Comparator接口

时间:2011-06-13 csdn博客 taomoon719

在实际开发中,我们常常需要对某些数据进行排序,这些数据往往使用数组 或者集合保存。对于数组中的数据排序,API中提供了一个数组的工具类, java.util.Arrays,类中重载了大量的sort方法,可以对各种类型的数组进行排 序。如对于Object类型数组排序有如下方法:

public static void sort(Object[] a)

假设有类Course,如下:

package com.csst.relation;
public class Course {
    private String title;
    private double price;
    public Course(String title, double price) {
       super();
       this.title = title;
       this.price = price;
    }
    public Course(String title) {
       super();
       this.title = title;
    }
    public Course() {
       super();
    }
    public String getTitle() {
       return title;
    }
    public void setTitle(String title) {
       this.title = title;
    }
    public double getPrice() {
       return price;
    }
    public void setPrice(double price) {
       this.price = price;
    }
}

如果有一个Course类型的数组,需要排序,按照Arrays类的方法,仿佛只要 将数组作为参数,传递给sort方法即可。但是只要我们深入考虑一下,就会发现 问题。对于Course对象,所谓的顺序应该有个排序标准,比如,按照价格排,还 是名称排?这个排序标准确定了,才能对多个Course对象排序。

仔细阅读Arrays.sort方法的详细描述,会发现有一个要求,即使用该方法排 序的对象,必须是Comparable类型的。Comparable是一个接口,只要Course类实 现这个接口即可,覆盖其中的方法:

public int compareTo(Object o)

假设,我们希望Course数组根据price排序,那么将Course类实现Comparable 接口,覆盖compareTo方法:

public int compareTo(Object arg0) {
       // TODO Auto-generated method stub
       Course c=(Course)arg0;
       if(this.price>c.price){
           return 1;
       }else if(this.price>c.price){
           return -1;
       }else{
           return 0;
       }
    }

Java语言入门教程(十七):Comparable与Comparator接口(2)

时间:2011-06-13 csdn博客 taomoon719

初学者可以借助这个例子,理解一下接口的作用。接口Comparable定义了所 有需要使用sort方法排序的对象的共同行为,否则sort方法根本无法实现。

如果Course数组可能根据价格排序,也可能需要根据名称排序,显然使用这 个方法就有局限性,因为compareTo方法只可能实现一种比较逻辑。Arrays类中 还有另外一种排序方法:

public static void sort(Object[] a, Comparator c)

Comparator是另一个接口,其中有一个方法:

public int compare(Object o1, Object o2)

只要创建一个类,实现Comparator接口,实现compare方法,就可以进行排序 ,如下:

package com.csst.relation;
import java.util.Comparator;
public class PriceComp implements Comparator {
    public int compare(Object arg0, Object arg1) {
       // TODO Auto-generated method stub
       Course c1=(Course)arg0;
       Course c2=(Course)arg1;
       if(c1.getPrice()>c2.getPrice()){
           return 1;
       }else if(c1.getPrice()<c2.getPrice()){
           return -1;
       }else{
           return 0;
       }
    }
}

有了这个实现类,使用Arrays.sort(Object[] o,Comparator c)方法,即可 以根据Comparator对象中的compare方法的比较算法进行排序。如果需要按照其 他标准排序,只要重新写类,实现Comparator接口即可。

通过本篇的学习,初学者不仅能掌握数组排序的方法,更能对Comparable和 Comparator接口比较熟悉。更进一步,还是建议能借此例子,理解接口的作用。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号