很久以來,我一直在重新學習Java,而我正在嘗試編寫一些排序算法。 (相當過時的)教科書我使用了Comparable接口來排序對象。因爲可比較對象現在是泛型類型,所以在編譯時這樣做會給我很多關於原始類型的警告。經過一番研究,它看起來像我可以這樣做,例如:有沒有辦法使用Java泛型類型來編寫排序算法?
public class Sorting
{
public static <T extends Comparable<T>> void quickSort(T[] list, int start, int end)
{
/*...*/
while((list[left].compareTo(list[pivot]) < 0) && (left != right)) // for example
left++;
/*...*/
}
}
這樣做的問題是,調用這個方法的簡單的方式不起作用:
public class SortingTest
{
public static void main(String[] args)
{
// Produces an error, cannot create arrays of generic types
Comparable<Integer>[] list = new Comparable<Integer>[100];
/* fill the array somehow */
Sorting.quickSort(list, 0, 99);
}
}
這是非法的在Java中創建一個通用類型的數組。如果我嘗試實現合併排序,問題只會變得更糟,因爲這需要在合併排序方法本身內創建Comparable類型的數組。
有什麼辦法可以優雅地處理這種情況?
您可以使用比較器接口http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html – ares 2014-09-21 19:50:05
這不是問題......他想要編寫自己的通用分揀機!你可以重新打開。 – 2014-09-21 19:53:44
請注意,此問題似乎不是關於排序方法的簽名或實現,而是關於如何創建方法的實際參數之一。 – 2014-09-21 19:57:30