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