ArrayList コレクション型と List コレクション型

System.Collections.ArrayList オブジェクトまたは System.Collections.Generic.List<T> オブジェクトは、より複雑な機能を備えた配列です。 ArrayList クラスと List<T> ジェネリック クラスには、ほとんどの System.Collections クラスにはあるが Array クラスにはない、いくつかの機能が備わっています。 次に例を示します。

  • Array の容量が固定されているのに対し、ArrayList または List<T> の容量は必要に応じて自動的に拡張されます。 ArrayList.Capacity プロパティの値が変更されると、メモリの再割り当てと要素のコピーが自動的に行われます。

  • ArrayListList<T> には、任意の範囲の要素を追加、挿入、または削除するメソッドがあります。 Array では、一度に取得または設定できるのは、1 つの要素の値だけです。

  • 同期した ArrayList を作成する場合、Synchronized メソッドを使用すると簡単に実行できます。しかし、このタイプの同期はあまり効率的ではありません。 Array クラスおよび List<T> クラスでは、同期を実装するかどうかが開発者に任されています。 System.Collections.Concurrent 名前空間では同時リスト型が提供されませんが、ConcurrentQueue<T> 型と ConcurrentStack<T> 型は提供されます。

  • ArrayListList<T> には、読み取り専用ラッパーと固定サイズ ラッパーをコレクションに返すメソッドがあります。 Array にはありません。

その一方で、Array は、ArrayListList<T> にはない柔軟性を備えています。 次に例を示します。

  • Array の下限は設定できますが、ArrayList または List<T> の下限は常に 0 です。

  • Array には複数の次元を指定できますが、ArrayList または List<T> の次元は常に 1 次元です。 ただし、配列のリストまたはリストのリストを容易に作成できます。

  • 特定の型 (Array 以外) の Object は、ArrayList よりもパフォーマンスの点で優れています。 これは、ArrayList の要素が Object 型であり、したがって値型を格納または取得する場合に通常はボックス化やボックス化解除が行われるためです。 ただし、List<T> では、再割り当てが必要ない場合、つまり初期量がリストの最大サイズに対して適切な量である場合、同じ型の配列と同様のパフォーマンスになります。

配列を必要とするほとんどの状況では、代わりに ArrayList または List<T> を使用できます。これらは簡単に使用でき、一般に同じ型の配列と同様のパフォーマンスを発揮します。

ArraySystem 名前空間に含まれ、ArrayListSystem.Collections 名前空間に含まれ、List<T>System.Collections.Generic 名前空間に含まれます。

参照

参照

ArrayList

System.Collections

List<T>

System.Collections.Generic

Array

System.Collections.Concurrent

その他の技術情報

一般的に使用されるコレクション型