首页 > Web开发 > 详细

[ASP.NET] Dictionary 和 Hashtable 区别

时间:2016-03-11 17:03:59      阅读:202      评论:0      收藏:0      [点我收藏+]

Dictionary和Hashtable 是两个比较常用的表示键/值的集合,两者在实际使用过程中有何区别呢?

具体区别如下:

1. Hashtable不支持泛型,而Dictionary支持泛型。

2. Hashtable中的元素值为Object类型,所以在存储或检索值类型时通常会发生装箱和拆箱的操作,非常耗时。

3. 单线程中推荐使用Dictionary,有泛型优势。多线程中推荐使用Hashtable,默认的Hashtable允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()方法可以获得完全线程安全的类型,而Dictionary非线程安全,必须人为使用lock语句进行保护,效率大减。

4. 在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。

技术分享
 /// <summary>
        /// key为整型,Dictionary和Hashtable效率比较
        /// </summary>
        static void IntMethod()
        {
            Console.WriteLine("Key为整型,Dictionary和Hashtable查询性能比较:");

            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("Dictionary:" + stopwatch.ElapsedMilliseconds);

            stopwatch = Stopwatch.StartNew();
            for (int i = 0; i < count; i++)
            {
                object value = hashtable[i];
            }
            stopwatch.Stop();
            Console.WriteLine("Hashtable:" + stopwatch.ElapsedMilliseconds);            
        }
View Code
技术分享
/// <summary>
        /// Key为字符型,Dictionary和Hashtable查询性能比较
        /// </summary>
        static void StringMethod()
        {
            Console.WriteLine("Key为字符型,Dictionary和Hashtable查询性能比较:");

            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(), "String");
                hashtable.Add(i, i);
            }

            Stopwatch stopwatch = Stopwatch.StartNew();
            for (int i = 0; i < count; i++)
            {
                string value = dictionary[i.ToString()];
            }
            stopwatch.Stop();
            Console.WriteLine("Dictionary:" + stopwatch.ElapsedMilliseconds);

            stopwatch = Stopwatch.StartNew();
            for (int i = 0; i < count; i++)
            {
                object value = hashtable[i.ToString()];
            }
            stopwatch.Stop();
            Console.WriteLine("Hashtable:" + stopwatch.ElapsedMilliseconds);
        }
View Code

结果如下:

技术分享

 

参考:

http://www.cnblogs.com/akwwl/p/3680376.html

[ASP.NET] Dictionary 和 Hashtable 区别

原文:http://www.cnblogs.com/qianxingdewoniu/p/5266243.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!