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

更新 : 2007 年 11 月

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

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

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

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

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

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

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

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

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

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

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

  • 各要素に 1 つの値、1 つのキーと 1 つの値の組み合わせ、または 1 つのキーと複数の値の組み合わせのいずれを格納するか。

    • 1 つの値の場合は、IList インターフェイスまたは IList<T> ジェネリック インターフェイスに基づいた任意のコレクションを使用します。

    • 1 つのキーと 1 つの値の場合は、IDictionary インターフェイスまたは IDictionary<TKey, TValue> ジェネリック インターフェイスに基づいた任意のコレクションを使用します。

    • 埋め込みキーを持つ 1 つの値の場合は、KeyedCollection<TKey, TItem> ジェネリック クラスを使用します。

    • 1 つのキーと複数の値の場合は、NameValueCollection クラスを使用します。

  • 要素が格納された順序とは異なる順序で要素を並べ替える必要があるかどうか。

    • Hashtable クラスは、ハッシュ コードによって要素を並べ替えます。

    • SortedList クラスと SortedDictionary<TKey, TValue> ジェネリック クラスと SortedList<TKey, TValue> ジェネリック クラスは、IComparer インターフェイスと IComparer<T> ジェネリック インターフェイスに基づいて、キーによって要素を並べ替えます。

    • ArrayList には、IComparer の実装をパラメータとして受け取る Sort メソッドが用意されています。これに対応する List<T> ジェネリック クラスは、IComparer<T> ジェネリック インターフェイスの実装をパラメータとして受け取る Sort メソッドを提供します。

  • 情報の高速な検索と取得が必要かどうか。

  • 文字列だけを受け入れるコレクションが必要かどうか。

LINQ to Objects

LINQ to Objects では、オブジェクト型が IEnumerable または IEnumerable<T> を実装している限り、LINQ クエリを使用してメモリ内オブジェクトにアクセスできます。LINQ クエリは、データ アクセス用の共通のパターンを提供します。これは、通常、標準の foreach ループよりも簡潔で読みやすく、フィルタ処理、並べ替え、およびグループ化の機能を備えています。さらに、LINQ クエリによってパフォーマンスを向上させることもできます。詳細については、「LINQ to Objects」を参照してください。

参照

参照

System.Collections

System.Collections.Specialized

System.Collections.Generic

その他の技術情報

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