程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java語言入門教程(十七):Comparable與Comparator接口

Java語言入門教程(十七):Comparable與Comparator接口

編輯:關於JAVA

在實際開發中,我們常常需要對某些數據進行排序,這些數據往往使用數組 或者集合保存。對於數組中的數據排序,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;
       }
    }

初學者可以借助這個例子,理解一下接口的作用。接口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接口比較熟悉。更進一步,還是建議能借此例子,理解接口的作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved