对ArrayList使用Collection排序

时间:2013-04-25 02:48:05

标签: arrays collections generic-collections

class UnfairContainer<T> implements Comparable<UnfairContainer>
{    
    private ArrayList<T> array = new ArrayList<T>();

    public void sort()
    {
        Collections.sort(array);
    }

    public int compareTo(UnfairContainer o)
    {

    }
}

所以我的类实现了可比性,但是当我尝试创建调用Collections.sort()的sort方法时,它给出了一个错误,表示我无法使用ArrayList调用集合排序。有人可以帮忙吗?并帮助我使用compareTo方法,我坚持认为我想比较我的ArrayList中的每个元素

1 个答案:

答案 0 :(得分:1)

问题是列表不能保证可以排序。这是因为对于您当前的设置,T可能是任何内容 - 包括未实现Comparable的类,因此无法按Collections排序。 Collections.sort()的类型签名反映了这一点:

public static <T extends Comparable<? super T>> void sort(List<T> list);

要解决此问题,您需要在T上加上一个上限以确保它是可排序的:

class UnfairContainer<T extends Comparable<T> > 
        implements Comparable<UnfairContainer<T> >
{

...

T extends Comparable<T>表示T必须是实现Comparable的类。这让Collections知道可以对ArrayList进行排序,一切正常。

有关详细信息,请参阅java trail on bounded wildcards in generics