###コレクション###
オブジェクトの集合を表すためのクラス(List,Dictionaryなど)。C#では標準ライブラリ(System.Collections.Generic)として提供している。
ジェネリック
汎用的なクラスやメソッドを特定の型に対応付けするための仕組み。この性質を型安全、タイプセーフという。
var list = new List<string>();
var d = new Dictionary<string, MyClass>(); // <キーの型, 値の型>
##リスト##
配列のように要素が順序付けたれたコレクション。
・List
・LinkedList
・Stack
・Queue
・ArrayList // 古く型安全ではないためListのほうが良い
List
配列と異なり、サイズを後から変更できる。
LinkedList(二重リンクリスト)
要素同士の双方向のリンクで参照する。そのためインデックスを指定して要素を読み書きすることはできないが、要素の追加・削除は高速。
Stack
スタックは、後入れ先出し(LIFO : Last In First Out)、または先入れ後出し(FILO : Fisrt In Last Out)と呼ばれる構造。Undo機能などで用いられる。
Queue
キューは、先入れ先出し(FIFO)であり、待ち行列と呼ばれることもある。
##ディクショナリ##
一意のキーと値のペアで管理されるデータ構造。他言語でいうマップ、ハッシュ、連想配列。
Dictionary
順序を保証しない。
var dic = new Dictionary<string, string> { ["a"] = "あ", ["i"] = "い"};
foreach(var key in dic.Keys){
Console.WriteLine($"{key} : {dic[key]}");
}
foreach(var d in dic){
Console.WriteLine($"{d.Key} : {d.Value}");
}
SortedDictionary
キーをRed-Blackツリー(赤黒木)で管理し、キーの大小で並びを管理できる。
SortedList
SoortedDictionaryと同じくキーの順序を管理できるが、内部構造がキーでソート済みの配列になっており、二分探索ができる。
そのため追加や削除はSortedDictionaryより遅いが、キー探索は常に理想的なツリー状態のSortedDictionaryと同等の速度となる。
(偏りのあるツリー状態のSortedDictionaryより高速)
##セット##
HashSet
リストと異なり重複を許さず、順序も保証しない。
キーだけを持ち値を持たないディクショナリといえる。