2014-01-07 57 views
0

我正在嘗試編寫一個適用於數組和ArrayList的泛型mergesort方法,但我不確定這是否可能,因爲這兩個結構有不同的方法/用於添加/檢索元素的語法。可以同時採用數組和列表列表的通用方法

+2

超載聽起來像你的果醬。 – duffymo

+0

不可能在沒有重載的情況下做到這一點,因爲這樣做會破壞方法通用性的全部目的。 – manis

+0

@塔倫它並沒有打敗任何目的 - 相反,它是一種完美的方式來實現它。 – berry120

回答

3

我只是寫一個列表的方法,然後編寫第二個方法接受一個數組,它委託給第一個方法。如果您使用Arrays.asList,則對列表所做的任何更改都應該寫入原始數組。

public <T> void mergeSort(T array []) { 
    mergeSort(Arrays.asList(array)); 
} 

public <T> void mergeSort(List<T> list) { 
    // do sort here 
} 
+0

但是我的任務是編寫一個單一的方法 – manis

+0

使它成爲單一方法沒有實際價值。在上面的代碼中,CODE不重複,這是重要的部分。 –

2

你不能寫的排序這兩個完全相同的一個具體方法,但你可以寫一個重載的方法,並委託給其他:

public void mergeSort(List<Integer> list) { 
    Integer[] arr = list.toArray(new Integer[list.size()]); 
    mergeSort(arr); 
    list.clear(); 
    for(int num : arr) { 
     list.add(num); 
    } 
} 

public void mergeSort(Integer[] arr) { 
    //Actual sorting logic 
} 

你不能這樣做這有一種方法,除非你告訴它接受Object並開始拋出異常,如果它是錯誤的類型,這顯然不是goo練習!

+0

@ZouZou Doh,對不起。固定。 – berry120

+0

我也不認爲這會起作用,因爲對數組的更改不會寫入到備份列表中。當你調用list.toArray時,你會得到一個淺拷貝。 –

+0

@mattforsythe對不起,另一個大腦凍結時刻...現在修好了。 – berry120

相關問題