Руководство для других методов должно быть таким - просто подумайте, как должна выглядеть эффективная реализация.
Большинство других массовых операций над коллекциями (операций, которые обрабатывают каждый элемент в коллекции): O(n)
,поэтому они там не упоминаются.Примерами являются filter
, map
, foreach
, indexOf
, reverse
, find
...
Методы, возвращающие итераторы или потоки типа combinations
и permutations
, обычно O(1)
.
Методы, включающие 2 набора, обычно O(max(n, m))
или O(min(n, m))
.Это zip
, zipAll
, sameElements
, corresponds
, ...
Методы union
, diff
и intersect
: O(n + m)
.
Варианты сортировки, естественно, O(nlogn)
.groupBy
- O(nlogn)
в текущей реализации.indexOfSlice
использует алгоритм KMP и равен O(m + n)
, где m
и n
являются длинами строк.
Методы, такие как +:
, :+
или patch
, обычно являютсяO(n)
также, если только вы не имеете дело с конкретным случаем неизменяемой коллекции, для которой рассматриваемая операция более эффективна - например, добавление элемента к функционалу List
или добавление элемента к Vector
.
Методы toX
обычно O(n)
, так как они должны выполнять итерации всех элементов и создавать новую коллекцию.Исключение составляет toStream
, которое создает коллекцию лениво - так что это O(1)
.Кроме того, всякий раз, когда X
является типом коллекции, toX
просто возвращает this
, будучи O(1)
.
Реализации итератора должны иметь O(1)
(амортизированные) next
и hasNext
операции.Создание итератора должно быть наихудшим O(logn)
, но в большинстве случаев O(1)
.