各種Dictionary使ってみる
Genericあるのにいまさら非Genericなのを新規に使う意味は薄そう。
正直保守性下がるしw
static void Main(string[] args) { System.Collections.Hashtable hashTable = new System.Collections.Hashtable(); System.Collections.Specialized.ListDictionary listDictionary = new System.Collections.Specialized.ListDictionary(); System.Collections.Specialized.HybridDictionary hybrid = new System.Collections.Specialized.HybridDictionary(); for (int i = 0; i < 10000; i++) { string token = "token" + i.ToString(); hashTable.Add(i, token); listDictionary.Add(i, token); hybrid.Add(i, token); } long start, stop; start = DateTime.Now.Ticks; for(int i = 3000; i< 8000 ; i++) { string value = (string)hashTable[i]; } stop = DateTime.Now.Ticks; Console.WriteLine("HashTable : " + (stop - start).ToString()); start = DateTime.Now.Ticks; for (int i = 3000; i < 8000; i++) { string value = (string)listDictionary[i]; } stop = DateTime.Now.Ticks; Console.WriteLine("ListDictionary : " + (stop - start).ToString()); start = DateTime.Now.Ticks; for (int i = 3000; i < 8000; i++) { string value = (string)hybrid[i]; } stop = DateTime.Now.Ticks; Console.WriteLine("HybridDictionary : " + (stop - start).ToString()); Console.ReadLine(); }
結果
HashTable : 10001 ListDictionary : 4010230 HybridDictionary : 10000
用途はかんがえよー。
小さいうちは、ListDictionaryのが速度が出るが、量が多いとhashTableのが勝る。とはいえ、hashTableのキーには、一意にハッシュを返せる型を指定しないと、速度が超落ちる。