java.util.stream.Stream的大O复杂性<t> .sorted()

时间:2015-07-08 19:02:02

标签: java sorting time-complexity java-stream

有谁知道java.util.stream.Stream<T>.sorted()的时间复杂度是什么?

2 个答案:

答案 0 :(得分:18)

嗯,sorted()本身就是O(1),因为它是一个不消耗流的中间操作,只是简单地向管道添加操作。

一旦终端操作消耗了流,就会发生排序并且

  • 它没有做任何事情(O(1)),因为流知道元素已经排序(例如,因为它们来自SortedSet)
  • 或流不是并行的,它委托给Arrays.sort()(O(n log n))
  • 或流是并行的,它委托给Arrays.parallelSort()(O(n log n))

答案 1 :(得分:4)

从JDK 8开始,用于顺序排序的标准流API实现中使用的主要排序算法是TimSort。最坏的情况是O(n log n),但是如果数据被预先排序(正向或反向)或部分预先排序(例如,如果连接两个排序的话),它的工作速度非常快(O(n)和非常小的常数)再次列出并排序)。