集合排序方法

时间:2016-04-03 19:44:11

标签: java sorting collections

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

  

根据引发的顺序对指定的列表进行排序   指定比较器。列表中的所有元素必须是相互的   使用指定的比较器进行比较(即c.compare(e1,e2)   不得为任何元素e1和e2抛出ClassCastException   列表)。

为什么不指定对象是按升序还是降序排序?在Comparator界面compare方法中,告知obj1何时大于等于或小于obj2。而已。文档没有说明列表是否按升序排序。我自己检查过,是的,它正在提升。

3 个答案:

答案 0 :(得分:3)

没有"升序"或"降序"在您处理自定义Comparator时,此处有意义。 Comparator本身强加了一些顺序,可能是"提升"或"降序"就物体的自然排序而言,如果存在这样的自然排序。 sort的文档可能错误表示"提升"因为如果你传递一个Comparator来强制降序,那么排序将会下降。

错误发生在documentation for Comparator.compare。它说"少于"并且"大于"当它真的意味着"来到" "来自"。

定义降序的Comparator不符合文档的这一特定方面,但这只是一个文档问题。 Comparator的其余大部分文档都没有使用这个术语,只是正确地讨论了排序。

答案 1 :(得分:2)

根据给定的Comparator(或元素的自然顺序,如果它们是ComparableComparator,集合按升序顺序排序没有提供)。

至于为什么文档没有明确说明 - 你必须要问JDK的作者,但在英语中很常见的是假设排序隐含意味着提升订单,这个惯例经常延续到软件工程。例如,在SQL中,order by子句隐含地假设ASC,即使它没有明确说明。

答案 2 :(得分:0)

排序顺序将由ComparatorComparable的实施决定,因此Collections.sort方法无法保证升序或降序。