• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

浅谈C# 之 Hashtable 与 Dictionary的代码实例

c# 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

浅谈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);//编译通过,<mark>来源gaodaimacom搞#^代%!码网</mark>输出结果为: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是线程安全的。

以上就是浅谈C# 之 Hashtable 与 Dictionary的代码实例的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:浅谈C# 之 Hashtable 与 Dictionary的代码实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址