为啥我不能在我的 ArrayList<T> 上调用 Collections.sort()?
Posted
技术标签:
【中文标题】为啥我不能在我的 ArrayList<T> 上调用 Collections.sort()?【英文标题】:Why can't I call Collections.sort() on my ArrayList<T>?为什么我不能在我的 ArrayList<T> 上调用 Collections.sort()? 【发布时间】:2012-03-23 12:34:38 【问题描述】:对于可能有此类问题的任何人,您可能需要“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 方法,但没有成功。
我猜有一些关于“>”的东西我不明白......?
【问题讨论】:
不是Collections.sort()
,不是Collection.sort()
?
收藏有错别字?我想你的意思是Collections
【参考方案1】:
基本上有两件事你需要看:
收藏
来自Collections
该类仅由操作或返回集合的静态方法组成。它包含对集合进行操作的多态算法、“包装器”,它返回由指定集合支持的新集合,以及其他一些零碎的东西
所以基本上,如果您必须排序或执行任何此类算法,请使用它。
接下来是:->
收藏
这是一个提供 Java 集合框架基础的接口。它不包括地图和排序地图。它表示一组称为元素的对象,并具有具体实现的实现。当您想使用 ArrayLists 和 Maps 时,您需要考虑这一点。
因此,归根结底,您需要运行一个静态算法,该算法存在于 Collections 中。所以,使用 Collections.sort
【讨论】:
【参考方案2】:你需要写Collections
而不是Collection
。它们是相关的,但又不同。 :-)
【讨论】:
【参考方案3】:这是Collection**s**
,而不是Collection
:
对比
http://docs.oracle.com/javase/6/docs/api/java/util/Collection.html【讨论】:
【参考方案4】:您是说Collections.sort()
(集合复数)吗?
【讨论】:
【参考方案5】:它是Collections.sort(),带有一个 s。
import java.util.Collections
你应该没事。
【讨论】:
【参考方案6】:你的问题是你打电话给Collection.sort()
,而不是Collections.sort()
这是两个独立的类:
Collections
Collection
Collection 是一个接口,而 Collections 是一个实用程序类。
【讨论】:
宾果游戏!感谢您的快速回复。 @Steve 当然,当然。乐于助人:D【参考方案7】:另外,如果您使用的是 eclipse,请仔细检查 Collections 的导入语句是否正确!
【讨论】:
【参考方案8】:如果你因为类似的错误而来到这里:
未定义 List<...>
类型的方法 sort(Comparator<...>)
那么您可能正在使用 JDK 低于 1.8。在 Java 构建路径中更改它:
【讨论】:
以上是关于为啥我不能在我的 ArrayList<T> 上调用 Collections.sort()?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在我的 JavaDoc 中使用 <abbr> 标记?
为啥在我的 Mac 上编译的 C++ 库不能在服务器上运行?
CopyOnWriteArrayList操作java.lang.UnsupportedOperationException