コレクション(collection: データの「集まり」)を管理する方法には色々な種類があって、 それぞれ一長一短あります(目的に応じて使い分けます)。
.NET Framework の標準ライブラリにも、色々なコレクションを表すクラスが用意されています。 ここでは、どのコレクションをどういう場面で使えばいいのか、 ある程度勘所をつかめるように、 それぞれの挙動について簡単に説明していきます。
コレクションには、大きく分けると3系統のものがあります。
ここで紹介するコレクションは、いずれも System.Collections.Generic 名前空間で定義されています。
挿入した順序に意味があるコレクションです。 インデックスを使った(i 番目の要素の)読み書きができたり、 挿入した順序通りに要素を取り出せたりするタイプです。
List<T>, LinkedList<T>, Stack<T>, Queue<T> があります。
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
|
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
|
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
|
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
数学的な意味での集合(set)は、順序に意味を持ちません。 要素を含んでいるかどうかということにだけ意味があります。
プログラミング的にいうと、順序は狂っても構わないので、 要素の検索だけ高速にできてほしい場合があって、 そういうコレクションのことをセット(set: もちろん、数学的な意味での集合のこと)と呼びます。
HashSet<T>, SortedSet<T> があります。
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
|
キーを指定して値を検索する必要がある場合に使うコレクションです。
「キーと値のペア」を要素とするセットを作ればいいので、内部的なアルゴリズムはセットと同じになります。 逆にいうと、セットは、値のない(キーのみの)辞書と考えることもできます。
Dictionary<TKey, TValue>, SortedDictionary<TKey, TValue>, SortedList<TKey, TValue> があります。
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
|
| 用途 |
|
|---|---|
| 計算量 |
|
| 内部実装 |
その他、特殊系
BitArray
Concurrent 系
ObservableCollection も?