大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > C#:Hashtable和Dictionary

C#:Hashtable和Dictionary(1)

关键词:HashtableDictionaryc#  阅读(1237) 赞(17)

[摘要]本文是对C#:Hashtable和Dictionary的讲解,对学习C#编程技术有所帮助,与大家分享。

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中取值时

«上一页12下一页»

相关C#技巧推荐

    暂时没有相关推荐



    相关评论