麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

C#:Hashtable和Dictionary

2019-11-17 03:00:20
字體:
來源:轉載
供稿:網友

C#:Hashtable和Dictionary

Dictionary<TKey, TValue> () Hashtable()

第一、存儲的數據類型

Hashtable不是泛型的,不是類型安全的;Dictionary是泛型的,是類型安全的;

Hashtable的鍵值都是Object類型的,但是Dictionary的鍵值的數據類型是可以指定的。

也就是說如果往Hashtable里面存入Object以外的數據類型,則在取出該數據時,需要對其進行顯示的類型轉換,才能夠正常使用。而Dictionary則沒有這個問題。

從這方面講的話,Hashtable相當于Dictionary<Object,Object>

            Hashtable ht = new Hashtable();            Dictionary<string, int> dic = new Dictionary<string, int>();            ht.Add("A", 1);            dic.Add("A", 1);            //Console.WriteLine(ht["A"]+1);     //編譯錯誤!Object類型不能和int類型直接進行相加。              Console.WriteLine((int)ht["A"] + 1);//編譯通過,輸出結果為:2            Console.WriteLine(dic["A"] + 1);    //編譯通過,輸出結果為:2

第二、讀取數據的順序與添加數據的順序的一致性

Dictionary和Hashtable的讀取數據的順序和添加數據時的數據的順序的一致性均不能夠保證,或者可以說沒有一致性。

Dictionary在只添加不刪除的時候能夠保持讀取數據的順序和添加時候的順序是一致的;

但是經過刪除和添加操作之后,就不能夠保證讀取數據的順序和添加時候的順序一致了。

Dictionary<int, int> dic = new Dictionary<int, int>();            dic.Add(0, 0);            dic.Add(1, 1);            dic.Add(2, 2);            Console.WriteLine("僅僅經過添加元素處理之后:");            foreach (KeyValuePair<int, int> kvp in dic)            {                Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value);            }            dic.Remove(0);            dic.Add(3, 3);            Console.WriteLine("經過刪除和添加元素處理之后:");            foreach (KeyValuePair<int, int> kvp in dic)            {                Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value);            }            Console.ReadKey();

捕獲

對于Dicitionary而言,如果從中刪除一個元素,則之后新添加的元素會填補這個被刪除元素的位置,因而致使添加數據的順序與讀取數據的順序是不一致的。

對于Hashtable而言,它的數據存儲順序是按一定的算法算出來的,所以絕大多數情況下,它的數據讀取順序和數據添加順序是不一致的。

所以如果你需要保持數據添加時的順序的時候,最好不要用Dictionary和Hashtable。

第三、當用一個不存在的Key值到Hashtable或者Dictionary中取值時

對于Hashtable而言,如果用一個不存在的Key值進行取值的話,會返回一個null;

            Hashtable ht = new Hashtable();            Console.WriteLine(ht["b"]==null);            Console.ReadKey();

捕獲

對于Dictionary而言,如果用一個不存在的Key值進行取值的話,會引發“System.Collections.Generic.KeyNotFoundException”類型的異常。

所以在從Dictionary或者Hashtable取值時,可以先判斷Key值是否存在(用ContainsKey()方法進行判斷),以防止出現預期以外的值或者異常。

第四、線程安全性

Dictionary不是線程安全的,Hashtable是線程安全的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中文字幕免费一区 | 成人在线观看免费爱爱 | 一级毛片真人免费播放视频 | 国产亚洲精品久久午夜玫瑰园 | 精品久久一区二区 | 亚洲精品午夜电影 | 国产亚洲区 | 午夜国产精品成人 | 成人mm视频在线观看 | 性欧美大战久久久久久久免费观看 | 密室逃脱第一季免费观看完整在线 | 77成人影院 | 精品国产91一区二区三区 | 午夜视频在线观看免费视频 | 在线成人免费视频 | 一区二区三区欧美日韩 | 国产精品久久久久久久久久久久午夜 | 欧美国产精品一区二区 | 亚洲天堂一级片 | 娇妻被各种姿势c到高潮小说 | 亚洲小视频网站 | 久久精品男人 | 精国产品一区二区三区 | 羞羞视频免费视频欧美 | 免费在线观看毛片视频 | 999久久久| 日本看片一区二区三区高清 | 日韩黄色av | 欧美成人免费香蕉 | 91看片成人 | 欧美一级片一区 | 欧美成人免费一区二区三区 | 午夜精品在线视频 | 欧美一级一片 | 福利免费观看 | 国产精品午夜一区 | 欧美成人免费 | 毛片一级网站 | 久久国产精品二区 | 中文字幕在线播放第一页 | 一级黄色大片在线观看 |