読者です 読者をやめる 読者になる 読者になる

C#_ジェネリックコレクションとは

C# プログラム

ジェネリック:型に依存しないで記述する為の仕組み。
コレクション:collection [可算名詞] 収集物、収蔵品、集まり。

ジェネリックコレクション

型に依存しないデータの箱 (データの型が int でも float でも使える箱)。

 

ジェネリックコレクションクラス ( List クラス や Dictionary クラス )

型に依存しないデータの箱を表すクラス ( 設計書 )。
表現を変えると、
データの集まり( コレクション )を扱うジェネリック( 型に依存しない )クラス。

 

コレクション ( collection:データの集まり ) を管理する方法には複数ある。
それぞれ一長一短があり、目的に応じて使い分ける。
大きく分けて 3 系統。

  • リスト系
    挿入した順序に意味があるコレクション。
    インデックスを使った読み書きができたり、
    挿入した順番通りに要素を取り出せたりするタイプ。

     

  • セット系
    順序に意味を持たない。
    要素を含んでいるかどうかということだけに意味がある。
    順序は狂っても構わないので、要素の検索だけを高速にできてほしい
    コレクションのことをセットと呼ぶ。( set:数学的な意味での集合 )

     

  • 辞書系
    キーを指定して値を検索する必要がある場合に使うコレクション。
    「キーと値のペア」をよそとするセットを作ればいいので、
    内部的なアルゴリズムはセットと同様になる。
    ( 逆をいうと、セットは値のない( キーのみの )辞書と考えることもできる )

キー:要素を指定するための文字列、あるいは数値のこと。
数値の場合はインデックスと呼ばれることがある。 

 

リスト系 ( 順序に意味を持つ )

種類用途
List<T> 

インデックスを使って要素を読み書きする場合に使用。
特に、ランダム アクセスが必要な場合に使用。

LinkedList<T>

事前に大きめの領域を確保したくない場合や、
要素の数が大きく変わるので、事前確保の量を決めにくい場合に
使用。

Stack<T>

LIFO ( last in first out ) 後に入れた要素を先に出す。
要素を上に積み上げていくので、スタック ( stack:積み荷 ) と
呼ぶ。
一番上をどけないと、次の要素を取り出せない。

Queue<T> 

FIFO ( first in first out ) 先に入れた要素を先に出す。
後に並んで前から出ていくので、キュー ( queue:待ち行列 ) と
呼ぶ。

 

セット系 ( 要素の有無のみ。順序に意味を持たない )

種類用途
HashSet<T> 

メモリに余裕がある場合には最も高速なセット。
要素の順序保証はなし。
型はGetHashCode メソッドを正しく定義している必要あり。

SortedSet<T>

事前に大きめの領域を確保したくない場合や、
要素の数が大きく変わるので、事前確保の量を決めにくい場合に
使用。
要素の大小によって整列した状態で要素を列挙出来る。

 

辞書系 ( キーと値のペアを要素とするセット )

種類用途

Dictionary
<TKey, TValue> 

HashSet の辞書版。
キーによる順序保証はなし。

SortedDictionary
<TKey, TValue>

SortedSet の辞書版。

SortedList
<TKey, TValue>

 要素の挿入・削除より、検索の方が圧倒的に多い場合に使用。

 

 参考というかほぼ引用。
http://ufcpp.net/study/dotnet/bcl_collection.html

 

 以上。

< Memo >
仕組み:事をうまく運ぶために工夫された計画。くわだて。