为啥我不能在我的 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/Collections.html

对比

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> 标记?

为啥我不能有两个带有 ArrayList 参数的方法?

为啥我不能在我的用户控件中访问我的视图模型?

为啥在我的 Mac 上编译的 C++ 库不能在服务器上运行?

CopyOnWriteArrayList操作java.lang.UnsupportedOperationException

我正在尝试为 ArrayList .hasNext 写一个条件。为啥我不能写如下? [复制]