集合排序

| GDK文档指示Collection.sort(Comparator比较器)不会更改其被调用的集合,但是下面的代码则相反。这是实现中的错误,文档中的错误还是我的误解?
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
    
已邀请:
文档指出:   如果集合是列表,则为   排序到位并返回。   否则,元素是第一个   放入一个新列表,然后   排序并返回-留下   原始Collection不变。 这反映在sort()方法的实现中
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的实例。     

要回复问题请先登录注册