[java] ArrayListとVectorの違いは何ですか?


3 Answers

ドキュメントによれば、 VectorArrayListはほぼ同等です。 違いは、 Vectorへのアクセスは同期されますが、 ArrayListへのアクセスは同期されない点です。 これは、一度に1つのスレッドだけがVector上のメソッドを呼び出すことができ、ロックの取得に若干のオーバーヘッドがあることを意味します。 ArrayListを使用する場合、これはArrayListません。 一般的には、 ArrayListを使いたいと思うでしょう。 シングルスレッドの場合はより良い選択肢になり、マルチスレッドの場合はロックの制御が向上します。 同時読み込みを許可したいですか? ファイン。 10回の書き込みのバッチに対して1つの同期を実行したいですか? また、大丈夫です。 それはあなたの最後にもう少し気遣う必要がありますが、それはあなたが欲しいものです。 また、ArrayListがある場合、 Collections.synchronizedList関数を使用して同期リストを作成することができます。これにより、 Vector相当するものが得られます。

Question

ArrayListVectorの 2つのデータ構造の違いは何ですか?それらのそれぞれをどこで使用する必要がありますか?




基本的には、ArrayListとVectorの両方とも内部オブジェクト配列を使用します。

ArrayList: ArrayListクラスはAbstractListを拡張し、ListインタフェースとRandomAccess(マーカーインタフェース)を実装します。 ArrayListは、必要に応じて拡張できる動的配列をサポートしています。 それは要素に対して最初の反復を与えます。 ArrayListは内部オブジェクト配列を使用します。 それらはデフォルトの初期サイズ10で作成されます。このサイズを超えると、コレクションは自動的に15のデフォルトサイズの半分に増加します。

Vector: VectorはArrayListと似ていますが、それは同期されており、デフォルトの初期サイズは10です。サイズがそのサイズを超えると、元のサイズの2倍になります。つまり、新しいサイズは20になります。 RandomAccessを実装するためのArrayList以外 Vectorは4つのコンストラクタを持ち、Vector(int initialCapacity、int capacityIncrement)は2つのパラメータをとります。capacityIncrementは、ベクトルがオーバーフローしたときに容量を増やす量です。したがって、ロード係数をより詳細に制御できます。

いくつかの相違点は次のとおりです。




ArrayListVectorどちらもListインターフェイスを実装し、挿入順序を維持します。しかし、 ArrayListVectorクラスの間には多くの違いがあります...

ArrayList -

  1. ArrayListは同期されていません。
  2. ArrayListは、要素の数がその容量を超えた場合、現在の配列サイズの50%をインクリメントします。
  3. ArrayListはレガシークラスではなく、JDK 1.2で導入されています。
  4. ArrayListは非同期であるため、高速ArrayList
  5. ArrayListは、要素をトラバースするためにIteratorインターフェイスを使用します。

Vector -

  1. Vectorは同期されます。
  2. Vector増分100%は、要素の総数がその容量を超えた場合に配列のサイズを2倍にすることを意味します。
  3. Vectorはレガシークラスです。

  4. 現在のスレッドがオブジェクトのロックを解除するまで、 Vectorは同期しているために遅いです。つまり、マルチスレッド環境では、他のスレッドを実行可能または実行不可能な状態に保持します。

  5. VectorはEnumerationインタフェースを使用して要素をトラバースします。 しかし、Iteratorも使うことができます。

関連項目: https://www.javatpoint.com/difference-between-arraylist-and-vector : https://www.javatpoint.com/difference-between-arraylist-and-vector




ArrayListは新しいもので、20-30%高速です。

Vectorで明白な何かを必要としない場合は、 ArrayList






Related