Share via


コレクション クラスの選択

System.Collections クラスは、慎重に選択してください。型の選択を誤ると、コレクションの使用が制限される可能性があります。

次の点について検討してください。

  • 要素の値を取得した後で通常その要素が破棄される、要素が順番に並んだリストが必要かどうか。

    • この種のリストが必要で、先入れ先出し (FIFO) を必要とする場合は、Queue クラスまたは Queue ジェネリック クラスを使用することを検討します。後入れ先出し (LIFO) を必要とする場合は、Stack クラスまたは Stack ジェネリック クラスを使用することを検討します。

    • 必要でない場合は、その他のコレクションの使用を検討します。

  • FIFO、LIFO、ランダムなどの特定の順序の要素にアクセスする必要があるか。

    • Queue クラスと Queue ジェネリック クラスは、FIFO アクセスを提供します。

    • Stack クラスと Stack ジェネリック クラスは、LIFO アクセスを提供します。

    • LinkedList ジェネリック クラスでは、先頭から末尾へ、または末尾から先頭への順次アクセスが可能です。

    • 上記以外のコレクションは、ランダム アクセスを提供します。

  • インデックスによって各要素にアクセスする必要があるかどうか。

  • 各要素に 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

その他の技術情報

コレクションの作成と操作