時間複雜度爲ArrayList
數組或Java中的一個列表?獲取操作的時間複雜度是多少,是O(n)
還是O(1)
?對Java的ArrayList
回答
Java中的ArrayList
是List
,它由array
支持。
的get(index)
方法是恆定時間,O(1)
,操作。
代碼直出Java庫ArrayList.get(index)
的:
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
基本上,它只是返回一個值直出背襯陣列。 (RangeCheck(index)
)也是恆定的時間)
它的實現是一個數組做和get操作是O(1)。
的javadoc說:
大小,的isEmpty,獲取,設置 迭代器和操作的ListIterator中恆 時間運行。添加操作運行在分期常量時間, 即,添加N元素需要O(n)的時間。所有其他操作 以線性時間(粗略地說)運行。與LinkedList實現的 相比,常數因子較低。
要迂腐,它是一個由數組支持的List
。是的,get()
的時間複雜度是O(1)。
大家都已經指出的那樣,讀操作是不變的時間 - O(1),但寫操作必須支持數組中運行的空間,重新分配的潛力,副本 - 從而在O(n)的時間運行,因爲醫生說:
大小,的isEmpty,獲取,設置迭代器, 的ListIterator和操作在 固定時間運行。 添加操作以攤銷後的恆定時間運行 ,即 添加n個元素需要O(n)時間。 所有其它操作的運行 線性時間(粗略地說)。對於LinkedList 實施,與 相比, 的常數係數較低。
在實踐中,一些添加後,一切都是O(1),因爲每次容量耗盡時,支持數組都會加倍。所以如果數組從16開始,就會變滿,它會重新分配到32,然後是64,128等等,所以它可以擴展,但是GC可以在一個大的重新分配期間觸發。
這有點偏離主題,但我會討厭某個人感到困惑,並沒有真正注意到重點**獲取**操作。 – 2010-02-02 08:19:56
在我看到的JDK代碼(1.6.0_17)中,新容量實際上按(oldCapacity * 3)/ 2 + 1計算。 – Adamski 2010-02-02 09:01:15
對第一句語句進行梳理,這似乎暗示寫操作在O n)時間。這不是文檔所說的,它說*添加n個元素需要O(n)*。對於單個元素,插入時間仍然是O(1)。重新分配,複製等只是使它有點「更大」O(1)。 – 2010-02-02 10:28:08
剛一說明。
的get(index)
方法是一個常數時間,O(1)
但那樣的話,如果我們知道指數。如果我們嘗試使用indexOf(something)
獲得索引,那麼這將花費O(n)
- 1. ArrayList對象(java)
- 2. 的Java:對象的ArrayList
- 3. 數組對,ArrayList中的java
- 4. 對象的ArrayList幫助java
- 5. 的Java對象和ArrayList中
- 6. Java新的ArrayList對象myList
- 7. 面向對象的Java,arraylist
- 8. ArrayList對象是Java的Android
- 9. 解析成Java ArrayList對
- 10. java arraylist對象總數
- 11. 在Java中對ArrayList排序
- 12. java對和ArrayList問題
- 13. Arraylist ArrayList的Java大小
- 14. 的Java的ArrayList到名稱值對
- 15. 的Java添加對象的ArrayList錯誤
- 16. 迭代類對象的ArrayList中的Java
- 17. Php列表對象到java arraylist對象
- 18. Java二維ArrayList ArrayList
- 19. Java ArrayList - 返回ArrayList
- 20. 使用Java中的ArrayList中的內容對ArrayList排序
- 21. 的Java的ArrayList
- 22. 從Java中的ArrayList中刪除對象
- 23. 從Java中的ArrayList中刪除對象
- 24. 將對象添加到ArrayList中的Java
- 25. 在java中的ArrayList中追加對象
- 26. 在Java中搜索對象的ArrayList
- 27. Java中的ArrayList和Singleton對象
- 28. 訪問對象類變量的ArrayList(JAVA)
- 29. 來自ArrayList的Java對象方法
- 30. 用Java對HashTables的ArrayList進行排序
這是恆定的時間,因爲array [n] ----意味着系統將只進行數學計算= offsetvalue +(變量的大小)* n 。所以這整個計算將在處理器中發生,而不會一次又一次地訪問內存位置。這就是爲什麼它是O(1) – 2013-06-09 14:37:38