簡體   English   中英

集合排序

[英]collection sorting

GDK文檔表明Collection.sort(比較器比較器)不會更改它所調用的集合,但下面的代碼另有說明。 這是實施中的錯誤,文檔中的錯誤,還是我的誤解?

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是List,則會對其進行排序並返回。 否則,首先將元素放入新列表中,然后對其進行排序和返回 - 保持原始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的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM