sorted() 和 thenComparing() 方法(按多个字段(条件)排序)的流 API 中的排序复杂度时间是多少?

What is the sorting complexity time in the streaming API for the sorted() and thenComparing () methods (sorting by multiple fields (conditions))?

我有一个信息,Stream API 中的 sorted() 方法可能使用归并排序 (mergesort) .

然后时间复杂度排序的种类:

大 Θ (n (log n) ) - best

大 Ω (n (log n) ) - 平均

大O (n (log n) ) - 最差

space 复杂性 – O (n) - 最差

如果我们使用自定义对象的多个字段进行排序,使用 then.comparing()[=40=,时间复杂度 是多少? ] 建立比较链 ?

在这种情况下,您将如何计算时间复杂度?

而实际使用的算法在Stream.sorted is intentionally unspecified, there are obvious reasons not to implement another sorting algorithm, but use the existing implementation of Arrays.sort.

当前的实现使用 TimSort,这是合并排序的一种变体,可以利用输入中预排序元素的范围,当输入已经排序时,最好是完全线性的,这也适用于输入向后排序的可能情况。在这些情况下,不需要额外的内存。平均情况介于 O(n log n).

的最佳情况和不变的最坏情况之间。

中所述,关于 Arrays.sort 中使用的算法的一般性陈述是棘手的,因为它们都是混合排序算法并不断改进。

通常,比较函数不依赖于输入的大小(要排序的数组或集合),这在使用 Comparator.comparing(…).thenComparing(…) 时不会改变,因为更昂贵的比较函数只添加一个常量不影响整体时间复杂度的因素,只要比较器仍然不依赖于输入大小。