[英]Collections sort method
根據由指定比較器產生的順序對指定列表進行排序。 列表中的所有元素必須使用指定的比較器相互比較(即,對於列表中的任何元素 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
,即使它沒有明確說明。
排序順序將由Comparator
或Comparable
的實現決定,因此Collections.sort
方法不能保證升序或降序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.