Vector クラスと ArrayDeque クラスの違いは何ですか? 昨日、ArrayDeque クラスについて読みましたが、以前は Vector クラスを使用していました。
3 に答える
基本は次のとおりです。
Vectorjava.util.List要素へのインデックスベースのアクセスを許可するコンテナーを定義するimplements 。また、 も実装interface RandomAccessします。これは、基になる表現によって要素への高速な (通常はO(1)) アクセスが可能であることをユーザーに示します。
ArrayDequeコンテナの最初と最後からの素早い要素の追加と削除をサポートjava.util.Dequeするコンテナを定義します。
主な違い:
VectorList.add(int index, E element)またはのオーバーロードされたバージョンを使用して、コンテナの中央に要素を追加することをサポートしますList.addAll(int index, Collection<? extends E> c)。Vectorremoveメソッドを使用して、コンテナの中央から要素を削除することをサポートしています。Vectorとメソッドを使用するsetとsetElementAt、インプレース要素スワップ ( 内の 1 つのオブジェクトVectorを別のオブジェクトに置き換えるO(1)操作) を実行できます。adda の最後までのVector時間は一定時間償却されます。ベクトルの先頭または中間への加算は線形時間操作です (O(n))。ArrayDequeO(1)コンテナの前面と背面の両方で要素の追加/削除を一定時間 ( ) 償却しました。ArrayDequeコンテナ内の特定の位置にある要素を明確に削除することはできません。クラスのさまざまなremove、removeFirst、およびremoveLastメソッドを使用すると、わずかに制限された要素を削除できます。ArrayDequepeekキュー ( 、poll、add、addFirst) とスタック (offer、push、pop、 )、またはその両方のようpeekLastにクラスを使用するためのメソッドが付属していますaddLast(したがって、それがDouble-Ended Queueである理由)。ArrayDeque両端キューの途中に要素を追加することはサポートされていません。Vectorには、コンテナ内の特定の場所から開始するイテレータを取得できる特別な がListIteratorあり、要素の追加、削除、および設定もサポートしています。ArrayDequeの反復子は、これらの余分なメソッドをサポートしていません。Vectorは同期コンテナーです。つまり、マルチスレッド環境で同期/ロックを実行するコードが既に含まれています。の場合ArrayDeque、コンテナへのマルチスレッド アクセスを行う場合は、独自の同期コードを提供する必要があります。ArrayListは の非同期版であることに注意してくださいVector。
いくつかの違い:
- Vector はインターフェイスを実装し
Listますが、ArrayDeque はQueueインターフェイスを実装します。これらは異なるインターフェースであり、異なる一連の操作を提供します。Vector は通常のコンテナーですが、など*Queueのメソッドがあるため、マルチスレッド アプリケーション (プロデューサー/コンシューマー パターン) 向けです。polloffer - ベクトル スレッド セーフ (同期機能が組み込まれています)、ArrayDeque はスレッド セーフではありません。
- バージョン 1.0 以降の JDK に含まれる Vector、バージョン 1.6 以降の ArrayDeque。
Oracle のドキュメントによると、Vector と Stack はレガシー クラスであり、代わりに Arraylist と ArrayDeque を使用する必要があります。 https://docs.oracle.com/javase/tutorial/collections/implementations/index.html https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.htmlは「(これはclass は、非同期であることを除いて、Vector とほぼ同じです。)"