回答
感謝大家對我的貢獻,幫助我解決了這個問題。我使用了一個循環隊列,這個隊列是在矢量的幫助下編寫的。
您可以使用ArrayList,而不是載體在Java中。
那麼,不應該使用Vector類。 Java中有很多容器可用。其中很少:
ArrayList
適合隨機訪問,但不適合插入或從列表中移除。
LinkedList
對隨機訪問不好,但對於從容器中間迭代和添加/刪除元素來說是公平的。
看看這篇文章:
http://www.javaworld.com/javaworld/javaqa/2001-06/03-qa-0622-vector.html
的LinkedList可以添加/刪除在O項(1)
謝謝。很有用。 – CrazyC 2011-04-12 11:21:49
首先,矢量去除時間複雜度爲O(n)不爲O(n^2)。如果你想要更高性能的類,你應該選擇LinkedList。它的時間複雜度是不變的。
我想,Vector using System.arrayCopy的複雜性是O(n^2) – CrazyC 2011-04-12 11:22:46
這不是真的,你是如何得到System.arraycopy是O(n^2)這樣的想法的? – 2011-04-12 12:24:54
也許列表不是您的用例的理想數據結構 - 如果元素的排序不重要,您最好使用HashSet嗎?
實際上,Vector
和ArrayList
之間的差異是Vector
是同步的,而ArrayList
不是。一般來說,你不需要同步,因此你會使用ArrayList
(很像StringBuffer
< - >StringBuilder
)。
更換主要取決於你打算如何使用集合。
將對象添加到ArrayList
的速度非常快,因爲如果需要更多空間,它通常會加倍,並且如果您事先知道尺寸要求,甚至更好。
從ArrayList
中刪除的是O(n),但迭代和隨機訪問都很快。
如果您頻繁地添加或刪除操作,或者對列表進行迭代,則LinkedList
就可以。
你甚至可以考慮使用LinkedHashMap
,它允許快速訪問以及保留插入的順序。
我認爲,使用System.arrayCopy載體,其複雜性爲O(n^2)
該Vector
將使用System.arrayCopy
移動元件這是正確的。然而System.arrayCopy()
呼叫副本最多Vector.size()
元素,因此是O(N)
其中N
是向量的大小。
因此O(N^2)
對於單次插入/刪除不正確。
事實上,如果你想比O(N)
插入和刪除更好,你將需要使用某種類型的鏈表類型與遊標抽象,允許插入和刪除,在「當前位置」。即使這樣,如果您可以按照正確的順序進行插入/刪除,那麼您只會比O(N)
更好;即不是隨機順序。
FWIW,Java List
API不提供這樣的遊標機制......至少因爲它使用起來很尷尬,而且在某些情況/實現中只有效。
- 1. Java HashMap的矢量
- 2. 矢量矢量Java web服務
- 3. java矢量用法
- 4. Java:矢量定義
- 5. Java矢量幫助
- 6. java矢量爲arraylist
- 7. Java的矢量作用域
- 8. 的Java:矢量聲明
- 9. Java中的ThreadLocal矢量清理
- 10. 如何更新Clojure中的矢量項?
- 11. 如何更改C++中的矢量項?
- 12. 如何更新Clojure中的矢量項?
- 13. 在numpy中有效的矢量選擇
- 14. 使用矢量矢量的JDBC數據庫java
- 15. 矢量的矢量,C++
- 16. 矢量的矢量麻煩
- 17. 如何在「選項」中多次訪問矢量?
- 18. 如何返回矢量java
- 19. 獲得矢量Java反射
- 20. Java Vector3d和矢量邏輯
- 21. 矢量vs設置在java
- 22. Java矢量或基元ArrayList
- 23. 矢量矢量C++
- 24. push_back矢量矢量
- 25. 在Java中向矢量添加對象
- 26. 試圖在Java中旋轉3D矢量
- 27. 矢量閃亮選擇:: selectInput()
- 28. PL/SQL選擇矢量
- 29. 初始化矢量矢量(外部矢量和內部矢量)
- 30. 從2D矢量中分解矢量
您關於'remove'操作運行時間的信息是錯誤的。除此之外,使用'ArrayList'而不是'Vector'。 – 2011-04-12 11:12:09
ArrayList的添加和刪除行爲是什麼? – CrazyC 2011-04-12 11:14:18
@ Saurabh01與'Vector'一樣 - 它本質上是一樣的,但沒有無用的同步。 'Vector'很大程度上已經過時,並已被'ArrayList'取代。正如我所說的,'remove'的運行時間是線性的,所以它比O(n^2)好得多。 – 2011-04-12 11:18:07