java.util.stream.Stream<T>.sorted() 的大 O 复杂度

Big-O complexity of java.util.stream.Stream<T>.sorted()

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

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

一旦终端操作使用了流,就会进行排序,并且

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

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