コレクション クラスの選択
System.Collections クラスは、慎重に選択してください。型の選択を誤ると、コレクションの使用が制限される可能性があります。
次の点について検討してください。
要素の値を取得した後で通常その要素が破棄される、要素が順番に並んだリストが必要かどうか。
FIFO、LIFO、ランダムなどの特定の順序の要素にアクセスする必要があるか。
Queue クラスと Queue ジェネリック クラスは、FIFO アクセスを提供します。
Stack クラスと Stack ジェネリック クラスは、LIFO アクセスを提供します。
LinkedList ジェネリック クラスでは、先頭から末尾へ、または末尾から先頭への順次アクセスが可能です。
上記以外のコレクションは、ランダム アクセスを提供します。
インデックスによって各要素にアクセスする必要があるかどうか。
ArrayList クラスと StringCollection クラス、および List ジェネリック クラスでは、要素に付けられた 0 から始まるインデックス番号を使用して要素にアクセスできます。
Hashtable、SortedList、ListDictionary、StringDictionary の各クラス、および Dictionary ジェネリック クラスと SortedDictionary ジェネリック クラスでは、要素のキーを使用して要素にアクセスできます。
NameObjectCollectionBase クラスと NameValueCollection クラス、および KeyedCollection ジェネリック クラスと SortedList ジェネリック クラスでは、要素に付けられた 0 から始まるインデックス番号または要素のキーのいずれかを使用して要素にアクセスできます。
各要素に 1 つの値、1 つのキーと 1 つの値の組み合わせ、または 1 つのキーと複数の値の組み合わせのいずれを格納するか。
1 つの値の場合は、IList インターフェイスまたは IList ジェネリック インターフェイスに基づいた任意のコレクションを使用します。
1 つのキーと 1 つの値の場合は、IDictionary インターフェイスまたは IDictionary ジェネリック インターフェイスに基づいた任意のコレクションを使用します。
埋め込みキーを持つ 1 つの値の場合は、KeyedCollection ジェネリック クラスを使用します。
1 つのキーと複数の値の場合は、NameValueCollection クラスを使用します。
要素が格納された順序とは異なる順序で要素を並べ替える必要があるかどうか。
Hashtable クラスは、ハッシュ コードによって要素を並べ替えます。
SortedList クラスと SortedDictionary ジェネリック クラスと SortedList ジェネリック クラスは、IComparer インターフェイスと IComparer ジェネリック インターフェイスに基づいて、キーによって要素を並べ替えます。
ArrayList には、IComparer の実装をパラメータとして受け取る Sort メソッドが用意されています。これに対応する List ジェネリック クラスは、IComparer ジェネリック インターフェイスの実装をパラメータとして受け取る Sort メソッドを提供します。
情報の高速な検索と取得が必要かどうか。
- 小規模なコレクション (10 項目以下) の場合は、ListDictionary の方が Hashtable より高速です。SortedDictionary ジェネリック クラスの検索機能は、Dictionary ジェネリック クラスより高速です。
文字列だけを受け入れるコレクションが必要かどうか。
StringCollection (IList がベース) と StringDictionary (IDictionaryがベース) は System.Collections.Specialized 名前空間に含まれます。
さらに、ジェネリック型の引数に String クラスを指定すると、System.Collections.Generic 名前空間の任意のジェネリック コレクション クラスを厳密に型指定された文字列コレクションとして使用できます。
参照
関連項目
System.Collections
System.Collections.Specialized
System.Collections.Generic