簡體   English   中英

contains(Object o) 的時間復雜度,在對象的 ArrayList 中

[英]Time complexity of contains(Object o), in an ArrayList of Objects

正如標題所說,我想知道ArrayListcontains()方法的時間復雜度是多少。

O(n)

sizeisEmptygetsetiteratorlistIterator操作在恆定時間內運行。 add操作在分攤常數 time 內運行,即添加 n 個元素需要 O(n) 時間。 所有其他操作都在線性時間內運行(粗略地說)。 與 LinkedList 實現相比,常量因子較低。

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

ArrayList是 O(n)

如果您查看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是列表中元素的數量。

它的O(n) contains(Object o)indexOf()上實現,它采用O(n) 所以contains(Object o)復雜性是防御性的O(n)

如果您需要,這里還有其他一些:

add() - O(1)
add(index, element) – O(n)
get() – O(1)
set() – O(1)
remove() –  (n)
indexOf()` – O(n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM