我正在尝试在Rosettacode.org上实现用java编写的Quicksort方法。
http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Java
但是,我不知道如何将元素添加到E类型的LinkedList中以便使用该方法。
public static <E extends Comparable<? super E>> void main(String[] args) {
List<E> list = new LinkedList<E>();
list.add(1);
}
当我尝试编译时出现以下错误:
QuickSort.java:12: error: no suitable method found for add(int) list.add(1);
^
method List.add(int,E) is not applicable
(actual and formal argument lists differ in length)
method List.add(E) is not applicable
(actual argument int cannot be converted to E by method invocation conversion)
method Collection.add(E) is not applicable
(actual argument int cannot be converted to E by method invocation conversion) where E is a type-variable:
E extends Comparable<? super E> declared in method <E>main(String[]) 1 error make: *** [c] Error 1
答案 0 :(得分:1)
这里有很多问题。
首先,您为什么要将主要方法声明为static<E extends Comparable<? super E>>
。
其次,您已将list
限制为通用类型E
,但未指定E
是什么。因此,要将int
添加到没有特定类型的列表中,将导致编译器出现转换问题。
此外,int
是一种原始类型,它不会跟随,即使它被自动装箱到java.lang.Integer
,它也不满足约束,因为E
不是特定/指定的。 / p>
我希望这会有所帮助。
更新
根据您提供的链接,您可以使用quickSort()
功能。
List<Integer> intList = new ArrayList<>(); //If using JDK 7 and higher.
OR
List<Integer> intList = new ArrayList<Integer>(); //If using JDK 6 and JDK 5.
现在...
//Add all your items in the list.
intList.add(1);
intList.add(50);
intList.add(10);
intList.add(8);
intList.add(-24);
//...etc.
//Sort,
intList = quickSort(intList);
由于E
被绑定到Comparable
的对象,因此它将接受符合该边界的任何列表。
答案 1 :(得分:0)
要添加整数,您应该更改
List<E> list = new LinkedList<E>();
到
List<Integer> list = new LinkedList<Integer>();
您收到错误的原因是,当您声明List<E>
时,您可以添加到列表中的所有内容都是类型为E
的元素,而整数不是E
< / p>