很久以来,我一直在重新学习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