2012-11-07 81 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