如何创建类型E的Java列表扩展了Comparable <! - ?超级E - >

时间:2014-10-02 12:58:39

标签: java

我正在尝试在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

2 个答案:

答案 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>