2012-11-07 83 views
3

我有一個點列表。我將其表示爲ArrayLists的ArrayList。我試圖使用泛型,以便列表可以存儲整數,浮點數等,並將它們視爲相同。所以我有:排序ArrayList的泛型ArrayList

ArrayList<ArrayList<? extends Number>>. 

我需要根據每個內部列表中的一個元素比較這些列表。

所以要做到這一點,我寫的是我使用的Collections.sort

比較器看起來像一個自定義的比較:

int compare(ArrayList<? extends Number> a, ArrayList<? extends Number> b) 
{ 
    return a.get(index).compareTo(b.get(index)) 
} 

這並不編譯過程的。編譯器抱怨通配符類沒有compareTo方法。

我試圖做甚至可能嗎?

+0

你打算怎麼用這個結構不同的尺寸來處理點?例如。如果你有(1,1,1)和(2,1)並選擇了第三個元素進行比較會怎麼樣? –

+0

這實際上是另一個問題。現在我只是檢查所有的點是否有適當的維度,否則就會拋出錯誤。 –

回答

5

如何定義你Comparator類爲:

class MyComparator<T extends Number & Comparable<T>> 
              implements Comparator<ArrayList<T>> { 
    @Override 
    public int compare(ArrayList<T> a, ArrayList<T> b) { 
     return a.get(index).compareTo(b.get(index)); 
    } 
} 
+0

謝謝你,完美的作品。我對泛型很陌生,你能告訴我這裏工作的概念是什麼嗎?特別是這個:MyComparator > –

+0

Well'T extends Number&Comparable >'意味着'T'是一個'Number' *和*它是'Comparable' - 這實質上就是您想要的。 [This](http://docs.oracle.com/javase/tutorial/java/generics/)是瞭解泛型的一個很好的資源。 [This](http://docs.oracle.com/javase/tutorial/java/generics/bounded.html)適用於有界的類型參數。 – arshajii

+0

爲獲得最佳效果,請使用'可比較' – newacct