Java.util.stream.Stream<T>.sorted()

2022-09-02 09:27:22

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


答案 1

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

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

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

答案 2

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