2014-10-02 49 views
0

我想在Rosettacode.org上實現用java編寫的Quicksort方法。如何創建類型E Java列表擴展可比較<? super E>

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

此代碼並不意味着駐留在'main'方法中。您可以在通用類型和非通用類型之間進行切換,正如您所看到的,它不起作用(編譯器如何知道'1'是否與'E'兼容?)。雖然我一點也不確定你想要達到什麼目的,但你鏈接的文章已經實現了快速排序代碼,那麼你爲什麼要重寫呢? – JonK 2014-10-02 13:13:14

+0

@JonK我不想重寫它,我試圖實現它。 – benjovanic 2014-10-02 14:17:42

+0

但它已經被實現 - 鏈接到**的quickSort方法是**實現。通過「實施」你的意思是「*使用*」? – JonK 2014-10-02 14:20:58

回答

1

這裏有很多問題。

首先,你爲什麼要宣佈你的主要方法爲static<E extends Comparable<? super E>>

其次,您已將list限定爲通用類型E,但尚未指定E是什麼。因此,要將int添加到沒有特定類型的列表中,編譯器將導致轉換問題。 另外,int是原始類型,它不會遵循,即使它被自動裝箱到java.lang.Integer,它也不會滿足約束,因爲E不是特定/指定的。

我希望這會有所幫助。


更新:

根據您所提供的鏈接,這是你將如何使用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,它將接受符合該邊界的任何名單。

+0

謝謝。所以我的問題是,我如何將E指定爲整數? – benjovanic 2014-10-02 14:19:01

+0

查看我更新的帖子,該函數由泛型類型「E」限定,以便編譯器可以確定具體的類型。在這種情況下,它會將'Integer'看作特定的類類型,並將'E'綁定到'java.lang.Integer'。 – 2014-10-02 14:25:48

0

爲了增加整數,你應該改變

List<E> list = new LinkedList<E>(); 

List<Integer> list = new LinkedList<Integer>(); 

的你得到錯誤的原因是由於事實上,當你宣佈List<E>那麼你可以添加到列表中的所有元素是E類型的元素和整數不是E

+0

java.util.List接口中有一個'List.add(int index,E element)'方法。 – 2014-10-02 13:05:42

+0

@BuhakeSindi我在那裏提到沒有像這樣的方法 – sol4me 2014-10-02 13:06:31

+0

糟糕。對不起,解決問題。 – 2014-10-02 13:07:32

相關問題