2010年6月21日 星期一

建立一個可排序的JAVA物件

[Using the Comparable Interface to Compare and Sort Objects]
如何製作一個可排序的JAVA物件

JAVA語言中,有許多類別可以依據某種條件進行排序的動作,例如Int, Double, String等。事實上,我們也可以把自己開發的類別(尤其是資料類別)加上這個功能,只要我們實作Comparable介面中的compareTo()方法。以下將以一個簡單的例子來說明做法。

假設我們封裝了一個代表母雞的資料類別,其中包含了年齡、平均下蛋數、重量、編號等,並且希望可以依據平均下蛋數的多少來排序。程式碼如下:

public class myHen implements Comparable<Object&rt;{
    private int Age;
    private int Eggs;
    private double Weight;
    private int No;

  public void setAge(int age){
     this.Age=age;
  }
  public void setEggs(int eggs){
     this.Eggs=eggs;
  }
  public void setWeight(double weight){
     this.Weight=weight;
  }
  public void setNo(int no){
     this.No=no;
  }

  public int getAge(){
     return Age;
  }
  public int getEggs(){
     return Eggs;
  }
  public double getWeight(){
     return Weight;
  }
  public in getNo(){
     return No;
  }

@Override
  public int compareTo(Object arg0)  throws ClassCastException{
    myHen obj=(myHen) arg0;
    if(this.Eggs > obj.getEggs()){return 1;}
    if(this.Eggs < obj.etEggs()){return -1;}
    else{return 0;}
  }
}
說明

重點請看到@Override之後,由於實作是Comparable介面,所以要覆寫compareTo()方法,內容怎麼寫無所謂,重點是若回傳值為1,那麼將會排在前頭,若是回傳值為-1那麼將排序在後。開發者可以依照自己所需要的判斷方式來達成。

實際應用

物件製作好了之後,讓我們來看看怎麼在實際應用中排序我們的母雞們,首先,我們先以一個測試的小程式生產三隻小母雞。


import java.util.Arrays;
import myHen;

  public class myHenSortTest {

 public static void main(String[] args) {
          myHen[] henhen=new myHen[4];
          henhen[0]=new myHen();
          henhen[1]=new myHen();
          henhen[2]=new myHen();
          //在這裡我們只把平均下蛋數資訊放進每隻雞裡
          henhen[0].setEggs(4);
          henhen[1].setEggs(3);
          henhen[2].setEggs(7);
          //未排序之前先把每隻雞列出來看看
          for(int i=0;i<henhen.length;i++){
               System.out.print(henhen[i].getEggs());
               System.out.print("\n");
   }
          /*接下來我們進行排序這裡很重要
           *我們以Arrays靜態類別的sort()方法來排序。
           */
          Arrays.sort(henhen); //排序
          System.out.print("以下有排序過");
          //再次的把母雞列出來看看
          for(int j=0;j<henhen.length;j++){
              System.out.print(henhen[j].getEggs());
              System.out.print("\n");
          }
        }
  }
結果
可以看到上面的測試程式輸出的結果如下:
4
3
7
以下有排序過
3
4
7

好了,這樣各位是不是清楚怎麼應用了呢^^