技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

各種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のキーには、一意にハッシュを返せる型を指定しないと、速度が超落ちる。