C# HashTable與Dictionary的區別

來源:互聯網
上載者:User

標籤:top   尋找   href   lap   span   語句   htm   推薦   system   

HashTable和Dictionary的區別

  1.HashTable

  雜湊表(HashTable)表示鍵/值對的集合。在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用於處理和表現類似key-value的索引值對,其中key通常可用來快速尋找,同時key是區分大小寫;value用於儲存對應於key的值。Hashtable中key-value索引值對均為object類型,所以Hashtable可以支援任何類型的keyvalue索引值對,任何非 null 對象都可以用作鍵或值。

  在雜湊表中添加一個key/索引值對:HashtableObject.Add(key,); 

  在雜湊表中去除某個key/索引值對:HashtableObject.Remove(key);

  從雜湊表中移除所有元素: HashtableObject.Clear();

  判斷雜湊表是否包含特定鍵key: HashtableObject.Contains(key);

  2.Dictionary

  Dictionary表示鍵和值的集合。

  Dictionary<string, string>是一個泛型

  他本身有集合的功能有時候可以把它看成數組

  他的結構是這樣的:Dictionary<[key], [value]>

  他的特點是存入對象是需要與[key]值一一對應的存入該泛型

  通過某一個一定的[key]去找到對應的值

  3.HashTable和Dictionary的區別:

  (1).HashTable不支援泛型,而Dictionary支援泛型。

  (2). Hashtable 的元素屬於 Object 類型,所以在儲存或檢索實值型別時通常發生裝箱和拆箱的操作,所以你可能需要進行一些類型轉換的操作,而且對於int,float這些實值型別還需要進行裝箱等操作,非常耗時。

  (3).單線程程式中推薦使用 Dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分。多線程程式中推薦使用 Hashtable, 預設的 Hashtable 允許單線程寫入, 多線程讀取, 對 Hashtable 進一步調用 Synchronized() 方法可以獲得完全安全執行緒的類型. 而 Dictionary 非安全執行緒, 必須人為使用 lock 語句進行保護, 效率大減。

  (4)在通過代碼測試的時候發現key是整數型Dictionary的效率比Hashtable快,如果key是字串型,Dictionary的效率沒有Hashtable快。

static void IntMethod()        {            int count = 1000000;            Dictionary<int, int> dictionary = new Dictionary<int, int>();            Hashtable hashtable = new Hashtable();            for (int i = 0; i < count; i++)            {                dictionary.Add(i,i);                hashtable.Add(i,i);            }            Stopwatch stopwatch = Stopwatch.StartNew();            for (int i = 0; i < count; i++)            {                int value = dictionary[i];            }            stopwatch.Stop();            Console.WriteLine(stopwatch.ElapsedMilliseconds);            stopwatch = Stopwatch.StartNew();            for (int i = 0; i < count; i++)            {                object value = hashtable[i];            }            stopwatch.Stop();            Console.WriteLine(stopwatch.ElapsedMilliseconds);         }        static void MethodString()        {            int count = 1000000;            Dictionary<string, string> dictionary = new Dictionary<string, string>();            Hashtable hashtable=new Hashtable();            for (int i = 0; i < count; i++)            {                dictionary.Add(i.ToString(),"aaa");                hashtable.Add(i.ToString(),"aaa");            }            Stopwatch stopwatch = Stopwatch.StartNew();            for (int i = 0; i < count; i++)            {                string value=dictionary[i.ToString()];            }            stopwatch.Stop();            Console.WriteLine(stopwatch.ElapsedMilliseconds);            stopwatch = Stopwatch.StartNew();            for (int i = 0; i < count; i++)            {                object value = hashtable[i.ToString()];            }            stopwatch.Stop();            Console.WriteLine(stopwatch.ElapsedMilliseconds);        }

C# HashTable與Dictionary的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.