まず、両方のカテゴリが List インターフェイスを実装しており、List インターフェイスには ArrayList、Vector、LinkedList という 3 つの実装クラスがあることを確認してください。リストは複数の要素を格納するために使用され、要素の順序を維持でき、要素の複製が可能です。 3 つの特定の実装クラスの関連する違いは次のとおりです。
ArrayList は、最も一般的に使用される List 実装クラスであり、配列を通じて内部的に実装され、要素への高速なランダム アクセスが可能になります。配列の欠点は、各要素間にギャップを設けることができないことです。配列のサイズが満たされない場合、記憶容量を増やす必要があり、既存の配列のデータを新しい記憶領域にコピーする必要があります。 ArrayList の途中で要素を挿入または削除する場合は、配列をコピーして移動する必要があり、比較的コストがかかります。したがって、ランダムな検索や走査には適していますが、挿入や削除には適していません。
Vector も ArrayList と同様に配列を通じて実装されますが、違いはスレッド同期をサポートしていることです。つまり、同時に 1 つのスレッドが Vector に書き込むことができ、複数のスレッドが同時に書き込むことによって生じる不一致を回避できます。 、同期を達成するのに多くの時間がかかるため、ArrayList にアクセスするよりも時間がかかります。
LinkedList はリンクされたリスト構造を使用してデータを保存します。これは、データの動的な挿入と削除に非常に適しており、比較的低速です。さらに、List インターフェイスで定義されていないメソッドも提供します。これらは、特にリストの先頭要素と末尾要素を操作するために使用され、スタック、キュー、および双方向キューとして使用できます。
Java ソースコードを見ると、配列のサイズが十分でない場合は、配列を再作成してから、ArrayList と の拡張配列のサイズを新しい配列にコピーする必要があることがわかりました。ベクトルが違います。
ArrayList内:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Vector内:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
ArrayListとVectorの違いは以下の通りです:
ArrayListはメモリ不足時にデフォルトで50%+1倍に拡張し、Vectorはデフォルトで1倍に拡張します。
Vector は、indexOf(obj, start) インターフェイスを提供しますが、ArrayList は提供しません。
Vector はスレッド セーフですが、スレッド セーフにはより大きなシステム オーバーヘッドが必要となるため、Vector はほとんどの場合使用されません。