c#中的Hashset给出了一种奇怪的行为

时间:2012-01-13 11:25:50

标签: c# data-structures memory-management while-loop hashset

我在C#中遇到HashSet问题....

这是我的代码:

  List<int> elements = new List<int>();
        for(int i = 0;i< 100000;i++)
        {
            elements.Add(i);
        }
        HashSet<int> c = new HashSet<int>();
        foreach(var ele in elements)
        {
        c.Add(ele);
        }

        Console.WriteLine("Working HashSet " + c.Count);

        var Numbers = new HashSet<int>();
        var mycount = 0;
        using (TextReader reader = File.OpenText(@"myfile.txt"))
        {
            while ((line = reader.ReadLine()) != null)
            {
                mycount++;
                int parsed = int.Parse(line);
                Numbers.Add(parsed);
            }
        }

        Console.WriteLine("my counter took" + mycount);

        Console.WriteLine("Bad HashSet" + Numbers.Count);

使用HashSet 100 000

我的柜台拿了50万

Bad HashSet 9999

为什么第二个hashset没有添加500 000个项目???? 这对我来说是一个谜。

3 个答案:

答案 0 :(得分:5)

HashSet不会添加重复的数字,因为这是设置工作的方式。

例如,假设这些是myfile.txt的前几行:

1
2
3
1
2
3
4

您将迭代7个值,但这些行中只有4个唯一数字,而HashSet不会添加1,2或3的重复数。在您的情况下,您有500,000行但只有9,999个唯一数字。

答案 1 :(得分:3)

您的列表包含500,000个项目,其中有9999个唯一项目。

答案 2 :(得分:0)

据推测,有一些重复。 HashSet<T>表示一个集合,并提供集合操作,因此提供名称。这就是我们用它的原因。