ArrayList.add()
является амортизированным O (1).Если операция не требует изменения размера, это O (1).Если требует изменения размера, это O (n), но затем размер увеличивается так, что некоторое изменение размера не произойдет некоторое время.
Из Javadoc:
Операция добавления выполняется с амортизированным постоянным временем, то есть добавление n элементов требует времени O (n).Все остальные операции выполняются за линейное время (грубо говоря).Постоянный коэффициент ниже по сравнению с таковым для реализации LinkedList.
Документация, как правило, довольно хороша для коллекций Java с точки зрения анализа производительности.
O (1) дляалгоритмы хеширования - это не просто применение «правильной» хеш-функции - даже с очень хорошей хеш-функцией вы все равно можете получить коллизии хеш-функций. обычная сложность равна O (1), но, конечно, это может быть O (n), если все хэши сталкиваются.
(Кроме того, это подсчетстоимость хеширования как O (1) - в действительности, если вы, например, хешируете строки, каждый вызов hashCode
может быть O (k) по длине строки.)