2012-05-08 32 views

回答

4

幾點不同:

  • 矢量實現List接口,而ArrayDeque實現Queue接口。這些是不同的界面,提供了不同的操作集:Vector是你的香草容器,而*Queue更多地面向多線程應用程序(生產者/消費者模式),因爲它具有諸如poll,offer等的方法;
  • 向量線程安全(它具有內置的同步),ArrayDeque不是線程安全的;
  • 從版本1.6開始,包含在JDK 1.0以及ArrayDeque中的向量。
9

的基礎是:

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方法從容器中間移除元素。

  • VectorsetsetElementAt方法允許執行就地元件交換(替換Vector用另一個一個對象,O(1)操作)。

  • addVector的末尾是攤銷的恆定時間。添加到矢量的開始或中間是一個線性時間操作(O(n))。

  • ArrayDeque已分攤恆定時間(O(1))添加/刪除容器正面和背面的元素。

  • ArrayDeque不允許您專門刪除容器中某個位置的元素。類的各種remove,removeFirstremoveLast方法允許您稍微更有限的元素移除。

  • ArrayDeque帶有用於使用類似一個隊列(peekpolladdaddFirst)的方法和像棧(offerpushpoppeekLastaddLast),或類似的兩個(因此爲什麼它是一個Double-Ended Queue)。

  • ArrayDeque不支持將元素添加到雙層中間。

  • Vector有特殊的ListIterator這允許您獲得一個迭代器,該容器在容器中的特定位置開始,還支持添加,刪除和設置元素。 ArrayDeque的迭代器不支持這些額外的方法。

  • Vector是一個同步容器,這意味着它已經包含用於執行多線程環境的同步/鎖定的代碼。對於ArrayDeque,如果您對容器進行多線程訪問,則必須提供自己的同步代碼。請注意,ArrayListVector的非同步對象。