Java ArrayList构造函数时间复杂度

时间:2016-03-30 01:14:02

标签: java time-complexity

我正在对ArrayList类进行一些研究,作为学校项目的一部分。

在Oracle网站的Java API文档中,它提到除了给定的少数操作之外的所有操作都是“大致线性时间”。

构造函数没有被列为给定少数的一部分,但我很难看到这个:

public ArrayList(int initialCapacity) {
       if (initialCapacity > 0) {
           this.elementData = new Object[initialCapacity];
       } else if (initialCapacity == 0) {
           this.elementData = EMPTY_ELEMENTDATA;
       } else {
           throw new IllegalArgumentException("Illegal Capacity: "+
                                              initialCapacity);
       }
}

是线性时间。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:3)

它是线性的,因为数组声明是O(n),如本问题所示:Java: what's the big-O time of declaring an array of size n?

答案 1 :(得分:1)

在您发布的代码中,发生了以下三种情况之一。

  1. 如果initialCapacity>0elementData = new Object[initialCapacity];

  2. 如果initialCapacity==0elementData = EMPTY_ELEMENTDATA;

  3. 如果initialCapacity<0,则抛出异常。

  4. 除了数字1之外的所有这些操作都需要恒定时间,因为不需要对集合进行迭代。

    Number 1需要线性时间,因为声明大小为n的数组需要O(n)时间。我不会重写整个理由,因为有一篇关于SO的文章覆盖了这个地方。一般概念:这是因为必须为每个n项分配空间。

    我希望得到帮助。 :)