HashSet、Dictionary、Hashtable三种类型Contains效率对比

来源:互联网 发布:ecshop数据库表结构 编辑:程序博客网 时间:2024/06/11 18:11


最近项目中经常会用到去重功能,写了一段测试代码,测试下同等数据量下HashSet、Dictionary、Hashtable三种类型的Contains效率

Stopwatch watch = null;            int max = 5000000;            int searchStart = 1555555;            int searchEnd = 4555555;            //Start******************            watch = Stopwatch.StartNew();            HashSet<string> hashSet = new HashSet<string>();            for (int i = 0; i < max; i++)            {                hashSet.Add("S" + i);            }            Console.WriteLine("HashSet写入:".PadLeft(15) + watch.Elapsed);            watch = Stopwatch.StartNew();            for (int i = searchStart; i < searchEnd; i++)            {                bool ss = hashSet.Contains("S" + i);                if (ss == false)                {                    Console.WriteLine("*");                }            }            Console.WriteLine("HashSet查询:".PadLeft(15) + watch.Elapsed);            //End********************            //Start******************            watch = Stopwatch.StartNew();            Dictionary<string, string> dict = new Dictionary<string, string>();            for (int i = 0; i < max; i++)            {                dict.Add("S" + i, null);            }            Console.WriteLine("Dictionary写入:".PadLeft(15) + watch.Elapsed);            watch = Stopwatch.StartNew();            for (int i = searchStart; i < searchEnd; i++)            {                bool ss = dict.ContainsKey("S" + i);                if (ss == false)                {                    Console.WriteLine("*");                }            }            Console.WriteLine("Dictionary查询:".PadLeft(15) + watch.Elapsed);            //End********************            //Start******************            watch = Stopwatch.StartNew();            Hashtable hashtable = new Hashtable();            for (int i = 0; i < max; i++)            {                hashtable.Add("S" + i, null);            }            Console.WriteLine("Hashtable写入:".PadLeft(15) + watch.Elapsed);            watch = Stopwatch.StartNew();            for (int i = searchStart; i < searchEnd; i++)            {                bool ss = hashtable.ContainsKey("S" + i);                if (ss == false)                {                    Console.WriteLine("*");                }            }            Console.WriteLine("Hashtable查询:".PadLeft(15) + watch.Elapsed);            //End********************            Console.WriteLine("OK....");            Console.ReadKey();

结论:

     HashSet写入:00:00:03.2449489
     HashSet查询:00:00:00.8248692
  Dictionary写入:00:00:03.2214529
  Dictionary查询:00:00:00.8669387
   Hashtable写入:00:00:09.2041413
   Hashtable查询:00:00:01.0867468

1、如果不需要value,仅仅需要对key做是否存在的对比,HashSet是最快的;

2、如果key/value,Dictionary也是非常快的,仅仅比HashSet慢一点点;

3、最慢的是Hashtable,可能是因为object类型需要转换的原因;

原创粉丝点击