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类型需要转换的原因;
- HashSet、Dictionary、Hashtable三种类型Contains效率对比
- HashTable、HashSet和Dictionary
- hashset\hashtable\Dictionary
- HashTable, Dictionary, HashSet的区别
- SortedList、SortedSet、HashSet、Hashtable、Dictionary、SortedDictionary 排序/可重复排序/过滤重复排序等简单对比
- SortedList、SortedSet、HashSet、Hashtable、Dictionary、SortedDictionary 排序/可重复排序/过滤重复排序等简单对比
- SortedList、SortedSet、HashSet、Hashtable、Dictionary、SortedDictionary 排序/可重复排序/过滤重复排序等简单对比
- HashSet 、 Dictionary 、List性能对比
- HashTable、HashSet和Dictionary的区别
- HashTable、HashSet和Dictionary的区别
- HashTable、HashSet和Dictionary的区别
- C# HashTable、HashSet和Dictionary的区别
- HashTable、HashSet和Dictionary的区别
- HashTable、HashSet和Dictionary的区别
- HashTable、HashSet和Dictionary的区别
- HashTable、HashSet和Dictionary的区别
- C#HashSet 、 Dictionary 、List性能对比
- 三种类型SD卡的对比
- 最新历史版本 :Android 开发ListView适配器优化
- 用css解决Unigui在IE系列浏览器中字体变小的问题
- IOS开发之保存图片到Documents目录及PNG,JPEG格式相互转换
- ExtJs3控件常用属性总结
- DirectFB 源码解读之初始化-2
- HashSet、Dictionary、Hashtable三种类型Contains效率对比
- C#与闭包
- 模版包含
- 关于python -2013.3.21
- Linux系统调用
- JSP的本质
- Chrome Vim 化扩展插件【推荐】
- db2 快速清空表数据
- AjaxControlToolKit--TabContainer控件的介绍