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)
,但如果数据被预排序(正向或反向)或部分预排序(例如,如果您连接两个排序的列出并再次排序)。
有谁知道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)
,但如果数据被预排序(正向或反向)或部分预排序(例如,如果您连接两个排序的列出并再次排序)。