2012-05-08 9 views
3

VectorクラスとArrayDequeクラスの違いは何ですか?私はArrayDequeクラスについて昨日読んでいましたが、以前はVectorクラスを使っていました。VectorクラスとArrayDequeクラス

答えて

4

いくつかの相違点:ArrayDequeはQueueインタフェースを実装するのに対し、

  • ベクターは、Listインタフェースを実装しています。これらは異なる操作セットを提供する異なるインタフェースです:ベクトルはあなたのバニラコンテナですが、、offerなどのメソッドを持っているため、*Queueはマルチスレッドアプリケーション(プロデューサ/コンシューマパターン)
  • ベクタースレッドセーフ(同期が組み込まれています)の場合、ArrayDequeはスレッドセーフではありません。
  • バージョン1.0以降のJDK、バージョン1.6以降のArrayDequeに含まれるベクター。
9

基礎は、次のとおり

Vectorが要素のインデックスベースのアクセスを可能にするコンテナを定義java.util.Listを実装します。また、interface RandomAccessも実装されています。これは、基礎となる表現が素早く(通常はO(1))要素にアクセスできることをユーザーに示します。

ArrayDequeは、コンテナの最初と最後から素早い要素の追加と削除をサポートするコンテナを定義します。java.util.Dequeを実装しています。

主な相違点:

  • VectorList.add(int index, E element)又はList.addAll(int index, Collection<? extends E> c)のオーバーロードされたバージョンを使用して、容器の中央に要素を追加サポート。

  • Vectorは、removeメソッドを使用して、コンテナの中央から要素を削除することをサポートします。

  • VectorsetsetElementAt方法は、(別の1、O(1)操作でVectorに一つのオブジェクトを置き換える)あなたはインプレース要素の交換を行うことができます。

  • addVectorの終わりまでは一定時間償却される。ベクトルの先頭または中央に追加するのは線形時間演算(O(n))です。

  • ArrayDequeは、コンテナの表裏両方の要素の追加/削除を一定時間償却した(O(1))。

  • ArrayDequeでは、コンテナ内の特定の位置の要素を削除することはできません。クラスのさまざまなremove,removeFirst、およびremoveLastのメソッドを使用すると、要素の削除が少し制限されます。

  • ArrayDeque

    キュー(peekpolladdaddFirst)のようなクラスを使用する方法と、スタック(offerpushpoppeekLastaddLast)のように来る、またはそれが故に理由の両方(のようなDouble-Ended Queue)。

  • ArrayDequeには、両端キューの中央に要素を追加する機能はありません。

  • Vectorには、特別ながあります。これにより、コンテナ内の特定の場所から開始されるイテレータを取得し、要素の追加、削除、および設定をサポートします。 ArrayDequeのイテレータは、これらの余分なメソッドをサポートしていません。

  • Vectorは同期コンテナです。つまり、マルチスレッド環境で同期/ロックを実行するためのコードが既に含まれています。 ArrayDequeについては、コンテナへのマルチスレッドアクセスを行っている場合は、独自の同期コードを提供する必要があります。 ArrayListは、Vectorの非同期対応です。

関連する問題