【问题标题】:Big-O complexity of java.util.stream.Stream<T>.sorted()java.util.stream.Stream<T>.sorted() 的大 O 复杂度
【发布时间】:2015-07-08 19:02:01
【问题描述】:

有人知道java.util.stream.Stream&lt;T&gt;.sorted() 的时间复杂度是多少吗?

【问题讨论】:

  • 嗯,Stream 是一个接口。这完全取决于实现。

标签: java sorting time-complexity java-stream


【解决方案1】:

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

一旦终端操作使用了流,就会发生排序

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      相关资源
      最近更新 更多