Vector和ArrayDeque類之間的區別是什麼?我昨天閱讀了ArrayDeque類,而之前使用過Vector類。Vector和ArrayDeque類
回答
幾點不同:
- 矢量實現
List
接口,而ArrayDeque實現Queue
接口。這些是不同的界面,提供了不同的操作集:Vector是你的香草容器,而*Queue
更多地面向多線程應用程序(生產者/消費者模式),因爲它具有諸如poll
,offer
等的方法; - 向量線程安全(它具有內置的同步),ArrayDeque不是線程安全的;
- 從版本1.6開始,包含在JDK 1.0以及ArrayDeque中的向量。
的基礎是:
Vector
實現java.util.List
,其限定容器,其允許元件基於索引的訪問。它還實現了interface RandomAccess
,它向用戶指示底層表示允許快速(通常爲O(1)
)訪問元素。
ArrayDeque
implements java.util.Deque
,它定義了一個容器,該容器支持從容器的開始和結束處快速添加和刪除元素。
主要區別:
Vector
支持添加元素進入容器的中部,使用的List.add(int index, E element)
或List.addAll(int index, Collection<? extends E> c)
重載版本。Vector
支持使用remove
方法從容器中間移除元素。Vector
的set
和setElementAt
方法允許執行就地元件交換(替換Vector
用另一個一個對象,O(1)
操作)。add
到Vector
的末尾是攤銷的恆定時間。添加到矢量的開始或中間是一個線性時間操作(O(n)
)。ArrayDeque
已分攤恆定時間(O(1)
)添加/刪除容器正面和背面的元素。ArrayDeque
不允許您專門刪除容器中某個位置的元素。類的各種remove
,removeFirst
和removeLast
方法允許您稍微更有限的元素移除。ArrayDeque
帶有用於使用類似一個隊列(peek
,poll
,add
,addFirst
)的方法和像棧(offer
,push
,pop
,peekLast
,addLast
),或類似的兩個(因此爲什麼它是一個Double-Ended Queue)。ArrayDeque
不支持將元素添加到雙層中間。Vector
有特殊的ListIterator
這允許您獲得一個迭代器,該容器在容器中的特定位置開始,還支持添加,刪除和設置元素。ArrayDeque
的迭代器不支持這些額外的方法。Vector
是一個同步容器,這意味着它已經包含用於執行多線程環境的同步/鎖定的代碼。對於ArrayDeque
,如果您對容器進行多線程訪問,則必須提供自己的同步代碼。請注意,ArrayList
是Vector
的非同步對象。
- 1. Deque的ArrayDeque類
- 2. ArrayDeque字符類
- 3. ArrayDeque和LinkedBlockingDeque
- 4. ArrayDeque大小和內容
- 5. Vector和Matrix類的接口?
- 6. ConcurrentLinkedDeque VS ArrayDeque
- 7. ArrayDeque包含Object?
- 8. 類的C++ Vector和由日提交
- 9. C++創建Vector類
- 10. DexGuard和Vector Drawables
- 11. srand()和vector :: iterator
- 12. Vector,Size_type和Encapsulation
- 13. ActionCommand和Vector
- 14. ArrayDeque添加多個元素
- 15. 添加在ArrayDeque迭代
- 16. ArrayDeque中的迭代器
- 17. i-vector和d-vector之間的區別
- 18. vector和DataFrame長度
- 19. 徵和std :: vector的
- 20. C++ vector.begin()和vector [0]
- 21. Vector和push_back()行爲
- 22. C++「vector of vector」
- 23. 使用類對象:: vector的
- 24. 類的C++ Vector對象
- 25. Vector類 - 模擬數字型
- 26. 類型'std :: vector <Object*>&'&'&'
- 27. 在Delphi中實現vector類?
- 28. 爲什麼ArrayDeque類在pollFirst方法中使用按位操作?
- 29. 爲什麼使用ArrayDeque/Queue java獲取未定義類型?
- 30. 如何爲類生成字典(vector <vector <short>>)