最近项目中经常会用到去重功能,写了一段测试代码,测试下同等数据量下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在写入和查询操作上的效率。结果显示,HashSet在查询上速度最快,Dictionary次之,而Hashtable由于对象转换原因表现最慢。在仅需要判断key存在的情况下,HashSet是最佳选择。
1449

被折叠的 条评论
为什么被折叠?



