鉴于
HashSet<T> set;
List<T> list;
T t;
对于SMALL集合,哪一项表现更好?
if (! list.Contains (t)) list.Add (t);
或者
set.Add (t);
答案 0 :(得分:1)
这实际上与您将如何使用数据结构有关。如果需要使用索引访问项目,则无法使用HashSet,如果需要存储重复项,则可以使用HashSet。 List通常用于大多数操作,因此我不了解HashSet的底层设计和功能,那么List就足够了。
答案 1 :(得分:1)
HashSet 应该用于您关心性能的情况(特别是如果您知道您将对大量项目进行操作)但不关心订单。
如果要遍历集合,请使用列表。迭代List中的所有项目通常比通过集合更快(除非你在像Contains这样的方法中使用)。
检查此样本以测试性能:
const int COUNT = 100000;
HashSet<int> hashSetOfInts = new HashSet<int>();
Stopwatch stopWatch = new Stopwatch();
for (int i = 0; i < COUNT; i++)
{
hashSetOfInts.Add(i);
}
stopWatch.Start();
for (int i = 0; i < COUNT; i++)
{
hashSetOfInts.Contains(i);
}
stopWatch.Stop();
Console.WriteLine(stopWatch.Elapsed);
stopWatch.Reset();
List<int> listOfInts = new List<int>();
for (int i = 0; i < COUNT; i++)
{
listOfInts.Add(i);
}
stopWatch.Start();
for (int i = 0; i < COUNT; i++)
{
listOfInts.Contains(i);
}
stopWatch.Stop();
Console.WriteLine(stopWatch.Elapsed);
Console.Read();