Я думаю, что в общем это O(n)
, так как объявленный массив должен быть нулевым со значениями по умолчанию, в вашем случае с false
.
Но ВМ также может доказать, что этот массив не читается сразу, то есть кто-то сначала записывает в него все элементы и только после этого их читает. В таком случае сложность будет O(1)
, потому что вы на самом деле ничего не делаете (значения по умолчанию не помещаются внутрь самого массива) - таким образом, константа.
Это, например, то, что происходит в java-11
с Collection::toArray
вроде через:
default <T> T[] toArray(IntFunction<T[]> generator) {
return toArray(generator.apply(0));
}
Итак, когда у вас есть что-то вроде:
List.of(1, 2, 3, 4)
.toArray(x -> new Integer[x]);
Реализация на самом деле будет выполнять new Integer[0]
и использовать это в сочетании с некоторым System.arrayCopy
вместо предполагаемого new Integer[4]
. Это делается потому, что виртуальная машина может доказать, что обнуление не требуется, поэтому пропустить его полностью.
person
Eugene
schedule
18.05.2019