数组内存分配的时间复杂度(非动态)

时间:2016-06-27 10:17:52

标签: java arrays time-complexity

如果我这样做

int n = some arbitrary number
int[] array = new int[n];

是需要线性的时间(O(n))还是常数(O(1))?
我看了in the javadocs,例如。 StackOverflow中的here但没有找到答案,因为我看到的所有帖子都涉及动态分配。

1 个答案:

答案 0 :(得分:0)

在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;
}