我正在关注Rosettacode 上这个用 Java 实现的快速排序示例。据我了解,这应该包含实现 Comparable 接口的一系列事物,并且类型是在运行时推断的。我用一个 main 方法将它封装在一个小类中,但是得到了一系列关于推断类型的错误。我对 Java 比较陌生,还不熟悉这个结构。
import java.util.List;
import java.util.LinkedList;
public class QuickSortExample {
public static <E extends Comparable<? super E>> List<E> quickSort(List<E> arr) {
if (arr.size() <= 1) return arr;
E pivot = arr.getFirst();
List<E> less = new LinkedList<E>();
List<E> pivotList = new LinkedList<E>();
List<E> more = new LinkedList<E>();
for (E i: arr) {
if (i.compareTo(pivot) < 0) less.add(i);
else if (i.compareTo(pivot) > 0) more.add(i);
else pivotList.add(i);
}
less = quickSort(less);
more = quickSort(more);
less.addAll(pivotList);
less.addAll(more);
return less;
}
public static void main(String[] args){
int[] myArray = new int[]{2,3,1,6,2,87,5,3,546,9,2,3,8,111};
int[] mySortedArray = quickSort(myArray);
System.out.println(mySortedArray);
}
}
我在编译时遇到这些错误
$ javac QuickSortExample.java
QuickSortExample.java:11: cannot find symbol
symbol : method getFirst()
location: interface java.util.List<E>
E pivot = arr.getFirst();
^
QuickSortExample.java:37: <E>quickSort(java.util.List<E>) in QuickSortExample cannot be applied to (int[])
int[] mySortedArray = quickSort(myArray);
^
2 errors
我有 3 个问题。
1) 什么?在下面的陈述中是什么意思?
<E extends Comparable<? super E>> List<E> quickSort(List<E> arr)
2) 由于 getFirst() 方法,这似乎适用于 LinkedList 对象。那是对的吗?如果是这样,我可以让它在一般列表上工作吗?我是否必须将我的整数数组转换为列表。我在这里有点困惑。我一直在咨询List和LinkedList javadocs。
3) 我可以用 List 对象而不是 LinkedList 来完成这一切吗?是否有我不明白的为这个例子选择 LinkedList 的原因?另外,如果我想用一个整数数组来调用它,我是否必须在输入的过程中以不同的方式转换(?)那个输入,因为它看起来不像 Array 从 List 继承?
对于非常基本的问题,抱歉,只是第一次真正学习 Java。