繁体   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