簡體   English   中英

集合排序方法

[英]Collections sort method

http://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List-java.util.Comparator-

根據由指定比較器產生的順序對指定列表進行排序。 列表中的所有元素必須使用指定的比較器相互比較(即,對於列表中的任何元素 e1 和 e2,c.compare(e1, e2) 不得拋出 ClassCastException)。

為什么不指定對象是按升序還是降序排序? Comparator接口中, compare方法告訴obj1何時大於等於或小於obj2 就是這樣。 文檔沒有說明列表是否按升序排序。 我自己檢查過,是的,它正在上升。

當您處理自定義Comparator時,“升序”或“降序”在這里都沒有意義。 Comparator本身強加了一些順序,根據對象的自然順序可能是“升序”或“降序”,如果這樣的自然順序甚至存在的話。 sort的文檔說“升序”是錯誤的,因為如果你傳遞給它一個強加降序的Comparator ,排序將是降序的。

錯誤在Comparator.compare文檔中 當它真正的意思是“在之前”和“之后”時,它會說“小於”和“大於”。

定義降序的Comparator不適合文檔的這個特定方面,但這只是一個文檔問題。 Comparator的其余大部分文檔都沒有使用這個術語,只是正確地討論了排序。

根據給定的Comparator (或元素的自然順序,如果它們是Comparable並且未提供Comparator則集合按升序排序。

至於為什么文檔沒有明確說明 - 你必須詢問 JDK 的作者,但在英語中假設排序隱式意味着升序是很常見的,並且這個約定經常延續到軟件工程中。 例如,在 SQL 中, order by子句隱含地假定為ASC ,即使它沒有明確說明。

排序順序將由ComparatorComparable的實現決定,因此Collections.sort方法不能保證升序或降序。

暫無
暫無

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

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