以下に示す比較表を使用して、他のいくつかの違いを調べてみましょう。
比較表
比較基準 | 配列リスト | ベクター |
---|---|---|
基本 | ArrayListクラスが同期されていません。 | ベクトルクラスは同期されています。 |
レガシークラス | ArrayListは標準のCollectionクラスです。 | Vectorはレガシークラスで、コレクションクラスをサポートするように再設計されています。 |
クラス宣言 | クラスArrayList | クラスVector |
再割り当て | 指定されていない場合、ArrayListはそのサイズの半分だけ増分されます。 | 指定しない場合、ベクトルはサイズが2倍になるように増分されます。 |
パフォーマンス | ArrayListは非同期であるため、Vectorよりも高速に動作します。 | Vectorは同期されているため、ArrayListよりも動作が遅くなります。 |
列挙/イテレータ | ArrayListは、Iteratorインタフェースを使用してArrayListに格納されているオブジェクトをトラバースします。 | Vectorは、Vectorに格納されているオブジェクトをトラバースするためにEnumerationおよびIteratorインタフェースを使用します。 |
ArrayListの定義
ArrayListは標準コレクションクラスのリストに属します。 ArrayListクラスはjava.utilパッケージ内で定義されており、これも標準のコレクションクラスであるAbstractListクラスを拡張し、Collectionインタフェースで定義されているインタフェースであるListも実装しています。 Javaでは、標準配列は常に固定長です。 それは一度作成されたことを意味します。 動的に拡大または縮小することはありません。 だから、あなたはあなたが使っている配列の長さについての予備知識を持っているべきです。 しかし、実行時に必要な長さが明らかにされることがあるので、このような状況に対処するためにjavaがArrayListを導入しました。
ArrayListは、オブジェクトへの参照を保持する配列を動的に作成するために使用されるクラスです。 この配列は、必要に応じてサイズが大きくなる可能性があります。 クラス宣言は次のとおりです。
クラスArrayList
ここで、Eは配列が保持するオブジェクトの型を指定します。 作成された配列は可変長で、オブジェクトがリストに追加または削除されるとサイズが増減します。
ArrayListは同期されていません。つまり、1つ以上のスレッドが同時にアレイを操作できます。 たとえば、あるスレッドがオブジェクト参照を配列に追加し、別のスレッドが同じ配列から同時にオブジェクト参照を削除しているとします。 ArrayListクラスを使った動的配列の作成
ArrayList S1 = new ArrayList(); System.out.println( "S1の初期サイズ:" + S1.size()); add(“ T”); S1。 S1.add( "C"); add(“ H”); S1。 S1.add(1、“ E”); S1。 System.out.println( "追加S1の後に含まれるもの:" + S1); System.out.println( "追加後のS1のサイズ:" + S1.size()); S1。削除( "T"); S1。取り外し(2); System.out.println( "削除後にS1に含まれるもの:" + S1); System.out.println( "削除後のS1のサイズ:" + S1.size()); // S1のOutputInitialサイズ:0加算後のS1には、[T、E、C、H];が含まれます。 追加後のS1のサイズ:4削除後のS1のサイズ:[E、H]削除後のS1のサイズ:2
上記のコードで、あなたはそれを見ることができます。 文字列型のオブジェクトの配列を作成しました。 add()メソッドを使用して配列S1にいくつかのオブジェクトを追加し、後でremove()メソッドを使用していくつかのオブジェクトを削除しました。 配列の初期サイズを指定しないと、長さが「0」になります。 ご覧のとおり、要素を追加したり削除したりすると、配列のサイズが拡大および縮小します。
ベクトルの定義
Vectorは、Collection Framework階層構造のコレクションクラスをサポートするように再設計されたLegacyクラスです。 vectorクラスは、 AbstractListクラスによって拡張され、 Listインタフェースによって実装されるjava.utilパッケージにも定義されています。 Vectorクラスは次のように宣言されています。
クラスVector
ここで、Eは配列に格納されるオブジェクトの種類を定義します。 Vectorクラスを使用して作成された配列は可変長です。 増分が指定されていない場合は、サイズが2倍になります。 Vectorを使った配列の作成を理解しましょう。
ベクトルV =新しいベクトル(1,1)。 V.addElement( "Tech"); V.addElement(「相違点」)。 System.out.println( "2追加後の容量:" + V.capacity()); V.addElement( "Between"); V.addElement( "Vectors"); System.out.println( "現在の容量:" + V.capacity()); // 2加算後の出力容量:2現在の容量:4
上記のコードでは、文字列オブジェクトの配列を宣言しながら、Vectorのコンストラクタでそれぞれsizeとincrementの値を特に言及しました。 したがって、配列の制限が終了すると、宣言中にコンストラクタに提供された値だけ増加します。
ArrayListとベクトルの主な違い
- 複数のスレッドが同時にArrayListを操作できるため、 非同期と見なされます。 ArrayListとは異なり、一度に1つのスレッドしかベクトルを操作できません。 したがって、それは同期と呼ばれます。
- Javaの初期のバージョンでは、いくつかのクラスとインタフェースはそれらが呼ばれたオブジェクトを格納するためのメソッドを提供するでしょう。レガシークラスベクトルはレガシークラスのJavaのうちの1つです。 その後、これらの従来のクラスはCollectionクラスをサポートするように再設計されましたが、ArrayListクラスは標準のCollectionクラスです。
- 配列の限界が完全に利用され、使い果たされた配列の隣に新しいオブジェクトが追加されると、そのサイズは両方の場合、すなわちArrayListとVectorの両方で大きくなりますが、違いはArrayListでは違います。増分値が指定されていない場合、Vector配列ではサイズが2倍になりますが、現在の配列の50%だけ増分されます。
- Vectorは、配列をトラバースするためにEnumerationとIteratorを使用しますが、ArrayListは、配列をトラバースするために反復子のみを使用します。
- ArrayListは非同期であり、多くのスレッドが同時にそれを操作できるため、そのパフォーマンスは、一度に1つのスレッドしか操作できないVectorよりも優れています。
類似点:
- ArrayListとVectorはどちらもjava.utilパッケージで定義されています。
- ArrayListとVectorはどちらもAbsractListクラスを拡張します。
- ArrayListとVectorはどちらもListインタフェースを実装しています。
- ArrayListとVectorの両方を使用して、必要に応じて拡大する動的配列を作成します。
- ArrayListとVectorはどちらもオブジェクト参照を保持します。
結論:
私は、ArrayListを使用する方がVectorを使用するよりも高速で優れているため、使用する方が良いと言うことで結論付けます。