在对象的ArrayList中包含(Object o)的时间复杂度

时间:2011-04-24 16:27:02

标签: java arraylist time-complexity

正如标题所说,我想知道ArrayList的contains()方法的时间复杂度是什么。

4 个答案:

答案 0 :(得分:47)

O(n)
  

sizeisEmptygetsetiteratorlistIterator操作会在固定时间内运行。 add操作以分摊的常量时间运行,即添加n个元素需要O(n)时间。所有其他操作都以线性时间运行(粗略地说)。与LinkedList实现相比,常数因子较低。

http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html

答案 1 :(得分:13)

ArrayList

的是O(n)

答案 2 :(得分:2)

O(n)contains(Object o)indexOf()的{​​{1}}上实现。因此O(n)的复杂性在防御上contains(Object o)

如果需要,还有其他一些东西

O(n)

答案 3 :(得分:1)

如果您查看ArrayList的源代码并检查其contains方法,则其外观如下:

public boolean contains(Object o) {
    return indexOf(o) >= 0;
}

contains将检查委托给indexOf方法。因此,如果我们检查indexOf的实现,则如下所示:

public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
            if (elementData[i]==null)
                return i;
    } else {
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}

从代码中可以看出,为了找到给定元素的索引,在最坏的情况下,必须遍历整个数组。随着数组大小的增加,按元素的搜索时间也会增加。因此,contains方法的时间复杂度为O(n),其中n是列表中元素的数量。