[英]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.