为什么我不能在我的ArrayList <t>上调用Collections.sort()?</t>

时间:2012-03-06 01:48:13

标签: java list sorting collections arraylist

对于任何可能有这样问题的人,你可能需要“Collections.sort”,而不是“Collection.sort”,这是我在下面犯的错误。

我定义了一个定义为

的类
public class Store implements Serializable, Comparable<Store> { ... }

我在另一个类中有一个字段定义为:

ArrayList<Store> fStores = new ArrayList<Store>();

我想对这个集合进行排序,所以在我调用的方法中:

Collection.sort(fStores);

但是,我收到以下编译错误:

The method sort(ArrayList<Store>) is undefined for the type Collection

ArrayList实现了List,并且来自文档:

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

那么,为什么我会收到错误?我也尝试创建自己的Comparator后代,并将其传递给sort方法,但没有运气。

我猜测有一些关于“&lt; T extends Comparable&lt;?super T&gt;&gt;”我不明白......?

8 个答案:

答案 0 :(得分:7)

基本上有两件事你需要注意:

  

收藏

来自Collections

  

此类仅包含对集合进行操作或返回集合的静态方法。它包含对集合进行操作的多态算法,“包装器”,它返回由指定集合支持的新集合,以及其他一些可能的结果

所以基本上如果你必须排序或做任何这样的算法使用它。

接下来是: - &gt;

  

集合

这是一个提供Java集合框架基础的接口。它不包括地图和排序地图。它表示一组称为其元素的对象,并具有具体实现的实现。当您想使用ArrayLists和Maps时,您需要考虑这一点。

所以,在底线,你有一个静态算法来运行,它存在于集合中。所以,使用Collections.sort

答案 1 :(得分:3)

您需要写Collections而不是Collection。他们是相关的,但不同。 : - )

答案 2 :(得分:1)

您的意思是Collections.sort()(收藏复数)吗?

答案 3 :(得分:1)

Collections.sort()带有s。

import java.util.Collections你应该没事。

答案 4 :(得分:1)

您的问题是您拨打的是Collection.sort(),而不是Collections.sort()

这是两个独立的类:

Collections

Collection

Collection是一个接口,而Collections是一个实用程序类。

答案 5 :(得分:1)

答案 6 :(得分:1)

如果你因为类似的错误到达这里:

  

方法sort(Comparator&lt; ...&gt;)未定义类型List&lt; ...&gt;

然后你可能使用 JDK低于1.8 。在Java Build Path中更改它:

enter image description here

答案 7 :(得分:0)

另外,如果您正在使用eclipse,请仔细检查Collections的import语句是否正确!