【问题标题】:Using Collection sort for ArrayList对 ArrayList 使用集合排序
【发布时间】:2013-04-18 19:19:09
【问题描述】:
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() 的排序方法时,它给了我一个错误,说我不能用 ArrayList 调用集合排序。任何人都可以帮忙吗?并帮助我使用 compareTo 方法,我被困在如何比较我的 ArrayList 中的每个元素

【问题讨论】:

    标签: arrays collections generic-collections


    【解决方案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&lt;T&gt; 表示 T 必须是实现 Comparable 的类。这让 Collections 知道 ArrayList 可以排序,并且一切正常。

    更多信息请参考java trail on bounded wildcards in generics

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多