List.Add vs HashSet.Add for c#中的小集合

时间:2014-09-02 04:16:12

标签: c# performance list set

鉴于

HashSet<T> set;
List<T> list;
T t;

对于SMALL集合,哪一项表现更好?

if (! list.Contains (t)) list.Add (t);

或者

set.Add (t);

怀疑来源:HashSet vs. List performance

2 个答案:

答案 0 :(得分:1)

这实际上与您将如何使用数据结构有关。如果需要使用索引访问项目,则无法使用HashSet,如果需要存储重复项,则可以使用HashSet。 List通常用于大多数操作,因此我不了解HashSet的底层设计和功能,那么List就足够了。enter image description here

答案 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();