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

前端 未结 2 1812
被撕碎了的回忆
被撕碎了的回忆 2020-12-18 20:12

Does anyone know what the time complexity of java.util.stream.Stream.sorted() is?

相关标签:
2条回答
  • 2020-12-18 20:44

    As of JDK 8, the main sorting algorithm which is also used in standard stream API implementation for sequential sorting is TimSort. Its worst case is O(n log n), but it works incredibly fast (with O(n) and quite small constant) if data is presorted (in forward or reverse direction) or partially presorted (for example, if you concatenate two sorted lists and sort them again).

    0 讨论(0)
  • 2020-12-18 20:56

    Well, sorted() in itself is O(1), since it's an intermediate operation that doesn't consume the stream, but simply adds an operation to the pipeline.

    Once the stream is consumed by a terminal operation, the sort happens and either

    • it doesn't do anything (O(1)) because the stream knows that the elements are already sorted (because they come from a SortedSet, for example)
    • or the stream is not parallel, and it delegates to Arrays.sort() (O(n log n))
    • or the stream is parallel, and it delegates to Arrays.parallelSort() (O(n log n))
    0 讨论(0)
提交回复
热议问题