国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#:Hashtable和Dictionary

2019-11-17 03:00:20
字體:
供稿:網(wǎng)友

C#:Hashtable和Dictionary

Dictionary<TKey, TValue> () Hashtable()

第一、存儲(chǔ)的數(shù)據(jù)類型

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

Hashtable的鍵值都是Object類型的,但是Dictionary的鍵值的數(shù)據(jù)類型是可以指定的。

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

從這方面講的話,Hashtable相當(dāng)于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);     //編譯錯(cuò)誤!Object類型不能和int類型直接進(jìn)行相加。              Console.WriteLine((int)ht["A"] + 1);//編譯通過,輸出結(jié)果為:2            Console.WriteLine(dic["A"] + 1);    //編譯通過,輸出結(jié)果為:2

第二、讀取數(shù)據(jù)的順序與添加數(shù)據(jù)的順序的一致性

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

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

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

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

捕獲

對(duì)于Dicitionary而言,如果從中刪除一個(gè)元素,則之后新添加的元素會(huì)填補(bǔ)這個(gè)被刪除元素的位置,因而致使添加數(shù)據(jù)的順序與讀取數(shù)據(jù)的順序是不一致的。

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

所以如果你需要保持?jǐn)?shù)據(jù)添加時(shí)的順序的時(shí)候,最好不要用Dictionary和Hashtable。

第三、當(dāng)用一個(gè)不存在的Key值到Hashtable或者Dictionary中取值時(shí)

對(duì)于Hashtable而言,如果用一個(gè)不存在的Key值進(jìn)行取值的話,會(huì)返回一個(gè)null;

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

捕獲

對(duì)于Dictionary而言,如果用一個(gè)不存在的Key值進(jìn)行取值的話,會(huì)引發(fā)“System.Collections.Generic.KeyNotFoundException”類型的異常。

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

第四、線程安全性

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 清流县| 山丹县| 贞丰县| 开江县| 松阳县| 巩义市| 黄陵县| 泗洪县| 澄迈县| 武宣县| 石棉县| 安陆市| 无棣县| 砀山县| 鄂伦春自治旗| 盘锦市| 天镇县| 墨竹工卡县| 丹凤县| 德州市| 安宁市| 秦皇岛市| 平昌县| 漳浦县| 扶绥县| 烟台市| 平顶山市| 托里县| 山西省| 天峻县| 霍城县| 尼勒克县| 郴州市| 余姚市| 潮州市| 绥滨县| 梅州市| 康乐县| 商洛市| 隆德县| 梧州市|