如果我这样做
int n = some arbitrary number
int[] array = new int[n];
所需时间是线性(O(n))还是常数(O(1))?
我查看了javadoc和eg。这里在StackOverflow,但没有找到答案,因为所有的帖子我看到处理动态分配
在java中,当你创建一个新的数组int
时,数组的所有成员都必须获得int的初始值(即'0'),因此初始化包括n
对值0
的赋值,从而占用O(n)。
您也可以使用以下代码验证它,使用不同的n:
public static void main(String[] args)
{
int n = 1000000;
int numSamples = 10000;
long sumTime = 0;
for (int i = 0; i < numSamples; i++)
{
sumTime += test(n);
}
double average = sumTime / (double) numSamples;
System.out.println(average);
}
private static long test(int size)
{
long start = System.currentTimeMillis();
int[] a = new int[size];
return System.currentTimeMillis() - start;
}