首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合排序

集合排序
EN

Stack Overflow用户
提问于 2011-03-22 23:36:55
回答 1查看 461关注 0票数 3

GDK文档指出Collection.sort(Comparator comparator)不会改变它所调用的集合,但是下面的代码表明不是这样。这是实现中的错误,文档中的错误,还是我的误解?

代码语言:javascript
复制
class ISO3LangComparator implements Comparator<Locale> {

    int compare(Locale locale1, Locale locale2) {
        locale1.ISO3Language <=> locale2.ISO3Language
    }
}

List<Locale> locales = [Locale.FRENCH, Locale.ENGLISH]
def sortedLocales = locales.sort(new ISO3LangComparator())

// This assertion fails
assert locales[0] == frenchLocale
EN

回答 1

Stack Overflow用户

发布于 2011-04-14 19:03:01

文档说明:

如果集合是一个列表,则将对其进行就地排序并返回。否则,元素首先被放置到一个新的列表中,然后进行排序并返回,保持原始集合不变。

这反映在sort()方法的实现中

代码语言:javascript
复制
public static <T> List<T> sort(Collection<T> self, Comparator<T> comparator) {
  List<T> list = asList(self);
  Collections.sort(list, comparator);
  return list;
}

asList方法检查给定的集合是否是java.util.List的实例。如果是,则返回引用;如果不是,则返回新的java.util.ArrayList实例。

由于您使用的是[]语法,因此您隐式地使用了java.util.List的一个实例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5393741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档