ArrayListとVectorの違い

Anonim

ArrayListとVectorを使用してアクセスされます。

ベクトルは、要素が追加または削除されたときに実行時に拡大/縮小する配列を実装します。その要素は、整数インデックスを使用してアクセスされます。容量と容量の2つのフィールドは、ベクトルストレージ管理の特徴を示します。

* List

* Random Access

* Cloneable

*シリアライズ可能なインタフェース

<! --1 - >

ArrayListはベクトルと同様に4つのインタフェースも実装しています。ここでも、ベクトルのように、そのサイズは実行時に変更される可能性があります。また、ArrayListのサイズと同じ大きさのcapacityというフィールドがあります。ベクトルとArrayListの両方は、任意の位置から要素を取り出すために、またコンテナクラスの最後から要素を挿入または削除するのに適しています。

APIの観点からは、ArrayListだけでなくベクトルも非常に似ています。では、2つの違いはどこにありますか?この問題については、以下の点が明らかになります。

<! - 2 - >

1。同期:ベクトルは同期されますが、ArrayListは同期されません。 ArrayListに要素を追加または削除すると、構造変更と呼ばれます。複数のスレッドがリストを変更しているコードブロックと同時にArrayListにアクセスしているときは、リストを外部的に同期させる必要があります。要するに、ベクトルの内容はスレッドセーフであり、ArrayListはそうではありません。要件にスレッドセーフなコレクションが記載されていない場合は、ArrayListを同期ヒットのパフォーマンスとして選択する必要があります。非同期のArrayListは高速です。

<! - 3 - >

2。データの成長:ArrayList要素とVector要素はどちらも配列として格納されますが、ベクターのデフォルトサイズは10です.ArrayListにはデフォルトのサイズはありません。 ArrayListまたはベクトルのいずれかに要素を追加すると、いずれかのクラスが空き領域を使い果たす可能性があります。このような場合、デフォルトではVectorのサイズは2倍になり、ArrayListのサイズは50%増加します。 ArrayListでは不可能なベクトルの場合は、インクリメント値を設定できます。 3。要素をトラバースする:単純にインデックスを使用して要素にアクセスできるので、ArrayListには利点があります。ベクタの場合は、その要素を横断するイテレータを作成する必要があります。要約:

1。コンテナクラスを単一スレッドまたはローカル変数で変更する場合は、ArrayListを使用する必要があります。 2。コンテナクラスに複数のスレッドがアクセスする場合は、ベクトルを使用します。そうでない場合は、手動同期を行う必要があります。 3。インクリメントのサイズはベクトルで指定でき、ArrayListではインクリメントできません。 4。ベクトルは同期され、ArrayListは同期されません。 5。ベクトルはサイズを2倍に増やすことができます。 ArrayListは50%増加させることができます。