JavaでのArrayListとVectorの違い

著者: Laura McKinney
作成日: 1 4月 2021
更新日: 1 5月 2024
Anonim
14.4 Vector vs ArrayList in Java
ビデオ: 14.4 Vector vs ArrayList in Java

コンテンツ


ArrayListとVectorは、どちらもCollection Framework階層の下のクラスです。 ArrayListとVectorは両方とも、必要に応じて配列のサイズを拡大できるオブジェクトの動的配列を作成するために使用されます。 ArrayListとVectorを区別する2つの基本的な違いがあります。Vectorは、後でコレクションクラスをサポートするように再設計されたLegacyクラスに属しますが、ArrayListは標準のコレクションクラスです。もう1つの重要な違いは、ArrayListが非同期であることです。ベクトルは同期されます。

以下に示す比較チャートを使用して、他のいくつかの違いを調べてみましょう。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 類似点
  5. 結論

比較表

比較の根拠配列リストベクター
ベーシックArrayListクラスは同期されません。ベクトルクラスは同期されます。
レガシークラスArrayListは標準のCollectionクラスです。ベクターは、コレクションクラスをサポートするために再設計されたレガシークラスです。
クラス宣言クラスArrayListクラスベクトル
再配分指定しない場合、ArrayListはそのサイズの半分だけ増加します。指定しない場合、ベクトルはサイズが2倍になるように増分されます。
性能ArrayListは非同期であるため、Vectorよりも高速に動作します。Vectorは同期されるため、ArrayListよりも動作が遅くなります。
列挙/イテレータArrayListは、Iteratorインターフェイスを使用して、ArrayListに格納されているオブジェクトを走査します。Vectorは、EnumerationおよびIteratorインターフェイスを使用して、Vectorに格納されているオブジェクトを走査します。


ArrayListの定義

ArrayListは、標準コレクションクラスのリストに属します。クラスArrayListは、 java.util パッケージ、それは拡張します AbstractList これも標準のコレクションクラスであり、実装します リスト、コレクションインターフェイスで定義されているインターフェイス。 Javaでは、標準配列は常に固定長です。それは一度作成されたことを意味します。サイズが動的に拡大または縮小することはありません。そのため、使用している配列の長さに関する事前知識が必要です。ただし、実行時に必要な長さが明らかになることがあり、JavaがArrayListを導入したこのような状況を処理することがあります。

ArrayListは、オブジェクトへの参照を保持する配列の動的作成に使用されるクラスです。この配列は、必要に応じてサイズが大きくなる可能性があります。クラス宣言は次のとおりです。

クラスArrayList

ここで、Eは配列が保持するオブジェクトのタイプを指定します。作成される配列は可変長であり、オブジェクトがリストに追加またはリストから削除されると、サイズが増減します。

ArrayListは同期されていません。つまり、複数のスレッドが同時に配列を操作できます。たとえば、あるスレッドが配列にオブジェクト参照を追加し、別のスレッドが同じ配列から同時にオブジェクト参照を削除している場合です。 ArrayListクラスを使用した動的配列の作成:

配列リスト S1 =新しいArrayList(); System.out.ln( "S1の初期サイズ:" + S1.size()); S1.add( "T"); S1.add( "C"); S1.add( "H"); S1.add(1、 "E"); System.out.ln( "S1が追加された後:" + S1); System.out.ln( "追加後のS1のサイズ:" + S1.size()); S1.remove( "T"); S1.remove(2); System.out.ln( "削除後S1には次が含まれます:" + S1); System.out.ln( "削除後のS1のサイズ:" + S1.size()); // S1のOutputInitialサイズ:0追加後、S1には次が含まれます。追加後のS1のサイズ:4削除後S1に含まれるもの:削除後のS1のサイズ:2

上記のコードでは、それを見ることができます。文字列型のオブジェクトの配列を作成しました。 add()メソッドを使用していくつかのオブジェクトを配列S1に追加し、後でremove()メソッドを使用していくつかのオブジェクトを削除しました。配列の初期サイズを指定しない場合、長さは「0」になります。ご覧のとおり、要素を追加および削除すると、配列のサイズが拡大および縮小します。


ベクトルの定義

ベクターは、コレクションフレームワーク階層のコレクションクラスをサポートするために再設計されたレガシークラスです。ベクトルクラスは、 java.util パッケージ、拡張 AbstractList クラスによって実装され リスト インタフェース。 Vectorクラスは次のように宣言されます。

クラスベクトル

ここで、Eは配列に格納されるオブジェクトのタイプを定義します。 Vectorクラスを使用して作成された配列は可変長です。増分が指定されていない場合、サイズが2倍に増加します。 Vectorを使用した配列の作成を理解しましょう。

ベクター V =新しいベクトル(1,1); V.addElement( "Tech"); V.addElement( "Differences"); System.out.ln( "追加後の容量:" + V.capacity()); V.addElement( "Between"); V.addElement( "Vectors"); System.out.ln( "現在の容量:" + V.capacity()); // 2つの追加後の出力容量:2現在の容量:4

上記のコードでは、文字列オブジェクトの配列を宣言しながら、Vectorのコンストラクターでそれぞれサイズと増分値を特に言及していることがわかります。したがって、配列の制限が終了すると、宣言中にコンストラクターに提供された値で増加することがわかります。

  1. 複数のスレッドが同時にArrayListで動作する可能性があるため、考慮されます 非同期。 ArrayListとは異なり、一度にベクター上で操作できるスレッドは1つだけです。したがって、それはと呼ばれます 同期済み.
  2. Javaの初期バージョンでは、一部のクラスとインターフェイスは、レガシークラスと呼ばれるオブジェクトを格納するメソッドを提供していました。ベクターは、レガシークラスのJavaの1つです。後で、これらのレガシークラスは、Collectionクラスをサポートするように再設計されましたが、ArrayListクラスは標準のCollectionクラスです。
  3. 配列の制限が完全に利用され、使い果たされた配列の隣に新しいオブジェクトが追加されると、ArrayListとVectorの両方の場合にサイズが大きくなりますが、違いはArrayListのサイズが指定されていない場合ですは、現在の配列の50%ずつ増加しますが、増分値が指定されていない場合、Vector配列ではサイズが2倍になります。
  4. VectorはEnumerationとIteratorを使用して配列をトラバースしますが、ArrayListは配列をトラバースするためにのみイテレータを使用します。
  5. ArrayListは非同期であり、多数のスレッドが同時に操作できるため、一度に1つのスレッドしか操作できないベクターよりもパフォーマンスが優れています。

類似点:

  1. ArrayListとVectorは両方ともjava.utilパッケージで定義されています。
  2. ArrayListとVectorは両方ともAbsractListクラスを拡張します。
  3. ArrayListとVectorはどちらもListインターフェイスを実装しています。
  4. ArrayListとVectorの両方を使用して、必要に応じて拡大する動的配列を作成します。
  5. ArrayListとVectorは両方ともオブジェクト参照を保持します。

結論:

最後に、ArrayListを使用するほうがVectorを使用するよりも高速で優れているため、VectorListを使用するよりも優れていると言います。