2014-01-05 33 views
0

我已經爲可比較數組,插入,合併和選擇數組編寫了排序方法,我通過改變了我從排序int數組之前的代碼來完成此操作,並且我只是將事情從int爲Comparable。然而,當我在做這對於int數組,我很清楚如何實際使用的方法,例如這是對於整數我我的選擇排序:排序可比接口數組

public void selectionSort(int[] list){ 
    for (int i=0;i<list.length;i++){ 
     for (int si=i;si<list.length;si++){ 
      if (list[si]<list[i]){ 
       int temp=list[i]; 
       list[i]=list[si]; 
       list[si]=temp; 
      } 
     } 
    }   
} 

,這是結束了使用此代碼方法:

public static void main(String[] args) { 
    Scanner in=new Scanner(System.in); 
    int numItems,searchNum,location; 
    Sorts sort=new Sorts();   
    int[]test;   
    System.out.print("Enter the number of elements: "); 
    numItems=in.nextInt(); 
    test=new int[numItems]; 

    for (int i=0;i<test.length;i++){ 
     test[i]=(int)(100*Math.random()); 
    } 

    System.out.println("Unsorted: "); 
    displayArray(test); 
    sort.selectionSort(test); 
    System.out.println("Sorted: ");   
    displayArray(test);  

,一切工作正常,但我可比選擇排序,我有這樣的代碼:

public static void selectionSort(Comparable[] list){ 
for (int i=0;i<list.length;i++){ 
     for (int si=i;si<list.length;si++){ 
      if (list[si].compareTo(list[i])<0){ 
       Comparable temp=list[i]; 
       list[i]=list[si]; 
       list[si]=temp; 
      } 
     } 
     } 
    } 

,但是當我開始編寫代碼來測試這種方法,我只是有沒有ID ea如何處理它,我不知道如何創建一個Comparable接口數組,這個概念對我來說太困難了,我找不到一種方法來使它工作。

+0

爲什麼在地球上你想擁有一系列的可比公司?你想解決什麼問題? –

+0

我們的老師告訴我們,爲數組,ArrayList和可比接口做所有3種排序方法將幫助我們進行下一次測試,因爲我們可以在編寫測試時使用我們的代碼 –

回答

5

Integer,例如,實現了Comparable,因此是合法的寫:

Comparable[] list = new Comparable[3]; 
list[0] = Integer.valueOf(3); 
list[1] = Integer.valueOf(2); 
list[2] = Integer.valueOf(3); 

您可以通過查看JavaDoc看到的是標準JDK Comparable所有的實施者。

麻煩的是(你應該看到這一些編譯器警告),你不能同時指定泛型參數爲Comparable,使參數對象的數組,也就是說,它是法律寫:

Comparable<Integer>[] list = new Comparable<Integer>[3]; 

即使是合法的編寫,你會遇到一個新的問題,因爲你所需要的具體類型的Comparable<T>測試使用。 Comparable<T>需要與T類型的對象進行比較(方法爲int compareTo(T o))。從本質上講,你的代碼只能工作,因爲它沒有參數化(T隱含地是Object,一切都延伸到Object),但是你一直在失去一些編譯時安全檢查。

通過一組通用參數化對象而不是Comparable的數組來參數化您的輸入可能更有意義。寫這篇使用泛型是有點棘手,該方法的原型看起來是這樣的:

public static void <T extends Comparable<T>> selectionSort(T[] list) { 
    // legal to call list[k].compareTo, because `T` is guaranteed to be `Comparable` 
} 

值得注意的是,這會爲任何非原始對象類型T實現Comparable<T>工作,如Integer[]Double[],但不是 an int[]