ArrayList オブジェクトまたは List オブジェクトは、より複雑な機能を備えた配列です。ArrayList クラスと List ジェネリック クラスには、ほとんどの System.Collections クラスにはあるが Array クラスにはないいくつかの機能が備わっています。次に例を示します。
-
Array の容量が固定されているのに対し、ArrayList または List の容量は必要に応じて自動的に拡張されます。Capacity プロパティの値が変更されると、メモリの再割り当てと要素のコピーが自動的に行われます。
-
ArrayList と List には、任意の範囲の要素を追加、挿入、または削除するメソッドがあります。Array では、一度に取得または設定できるのは、1 つの要素の値だけです。
-
同期をとる形式の ArrayList または List は、Synchronized メソッドを使用して簡単に作成できます。Array クラスでは、同期を実装するかどうかが開発者に任されています。
-
ArrayList と List には、読み取り専用ラッパーと固定サイズ ラッパーをコレクションに返すメソッドがあります。Array にはありません。
その一方で、Array は、ArrayList と List にはない柔軟性を備えています。次に例を示します。
-
Array の下限は設定できますが、ArrayList または List の下限は常に 0 です。
-
Array には複数の次元を指定できますが、ArrayList または List の次元は常に 1 次元です。
-
Object 以外の特定の型を持つ Array は、パフォーマンスの点で ArrayList より優れています。これは、ArrayList の要素は Object 型であり、したがって、値型を格納または取得する場合に通常はボックス化やボックス化解除が行われるためです。ただし、List では、再割り当てが必要ない場合、つまり初期量がリストの最大サイズに対して適切な量である場合、同じ型の配列と同様のパフォーマンスになります。
配列を必要とするほとんどの状況では、代わりに ArrayList または List を使用できます。これらは簡単に使用でき、一般に同じ型の配列と同様のパフォーマンスを発揮します。
Array は System 名前空間に含まれ、ArrayList は System.Collections 名前空間に含まれ、List は System.Collections.Generic 名前空間に含まれます。
参照