まず、リストインターフェイスを実装する両方のカテゴリを調べます。リストインターフェイスには、ArrayList、Vector、LinkedListの3つの実装クラスがあります。リストは、複数の要素を保存し、要素の順序を維持し、要素の繰り返しを許可するために使用されます。
3つの特定の実装クラスの関連する違いは次のとおりです。
1. ArrayListは、アレイを介して内部的に実装される最も一般的に使用されるリスト実装クラスであり、要素へのランダムアクセスを迅速に可能にします。配列の欠点は、各要素間に間隔を置くことができないことです。アレイサイズが満たされていない場合、ストレージ容量を増やす必要があります。すでにアレイのデータが新しいストレージスペースにコピーされていると言う必要があります。アレイリストの中間位置から要素を挿入または削除する場合、配列をコピー、移動する必要があり、コストが比較的高くなります。したがって、挿入や削除ではなく、ランダムルックアップやトラバーサルに適しています。
2.ベクトルはアレイを介して実装されます。違いは、スレッドの同期をサポートすることです。つまり、特定の瞬間に、1つのスレッドのみがベクトルを記述して、複数のスレッドが同時に書き込むことによって引き起こされることを避けることができますが、同期を実装するのに費用がかかるため、アレイリストにアクセスするよりも遅くなります。
3. LinkedListは、リンクされたリスト構造を使用してデータを保存します。これは、データの動的挿入と削除に非常に適しており、ランダムアクセスとトラバーサル速度は比較的遅いです。さらに、テーブルヘッダーとテール要素の操作に特別に使用され、スタック、キュー、双方向のキューとして使用できるリストインターフェイスでは定義されていないメソッドも提供します。
Javaソースコードを見ると、配列のサイズが十分でない場合、配列を再作成してから新しい配列に要素をコピーする必要があることがわかりました。アレイリストとベクトルの拡張配列のサイズは異なります。
ArrayList:
public boolean add(e e){ensurecapacity(size + 1); //要素を追加して、それらを収容できるかどうかを判断します。できない場合は、新しい配列elementData [size ++] = eを作成する必要があります。 trueを返します;} public void ensurecapacity(int mincapacity){modcount ++; int oldcapacity = elementdata.length; if(mincapacity> oldcapacity){Object OldData [] = elementData; //この行は有用性を示していませんでした。開発者がint newcapacity =(oldcapacity * 3)/2 + 1について何を考えているのかわかりません。 //新しい配列のサイズを追加するif(newcapacity <mincapacity)newcapacity = mincapacity; // mincapacityは通常サイズに近いため、これはwinです。 }}ベクトル:
private void ensurecapacityhelper(int mincapacity){int oldcapacity = elementdata.length; if(mincapacity> oldcapacity){object [] OldData = elementData; int newcapacity =(capulationincrement> 0)? (oldcapacity + caputerincrement):( oldcapacity * 2); if(newcapacity <mincapacity){newcapacity = mincapacity; } elementData = arrays.copyof(elementData、NewCapacity); }}ArrayListとVectorの違いは次のとおりです。
ArrayListは、メモリが不十分な場合にデフォルトで50% + 1の拡張され、ベクトルはデフォルトで1回拡張されます。
VectorはIndexOF(OBJ、Start)インターフェイスを提供しますが、ArrayListはそうではありません。
ベクトルはスレッドの安全レベルにありますが、ほとんどの場合、スレッドの安全性にはより大きなシステムオーバーヘッドが必要であるため、ベクターは使用されません。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。