有谁知道java.util.stream.Stream<T>.sorted()
的时间复杂度是什么?
答案 0 :(得分:18)
嗯,sorted()
本身就是O(1),因为它是一个不消耗流的中间操作,只是简单地向管道添加操作。
一旦终端操作消耗了流,就会发生排序并且
Arrays.sort()
(O(n log n))Arrays.parallelSort()
(O(n log n))答案 1 :(得分:4)
从JDK 8开始,用于顺序排序的标准流API实现中使用的主要排序算法是TimSort。最坏的情况是O(n log n)
,但是如果数据被预先排序(正向或反向)或部分预先排序(例如,如果连接两个排序的话),它的工作速度非常快(O(n)
和非常小的常数)再次列出并排序)。