代码之家  ›  专栏  ›  技术社区  ›  halivingston

hashset<t>与dictionary<k,v>w.r.t查找项是否存在的时间

  •  92
  • halivingston  · 技术社区  · 14 年前
    HashSet<T> t = new HashSet<T>();
    // add 10 million items
    
    
    Dictionary<K, V> t = new Dictionary<K, V>();
    // add 10 million items.
    

    谁的 .Contains 方法会更快返回吗?

    为了澄清,我的要求是我有1000万个对象(好吧,字符串是真的),我需要检查它们是否存在于数据结构中。我永远不会重复。

    4 回复  |  直到 8 年前
        1
  •  134
  •   Bernhard Barker    10 年前

    hashset vs list vs dictionary性能测试,取自 here .

    添加1000000个对象(不检查重复项)

    包含对10000个集合中一半对象的检查

    移除10000个集合中的一半对象

        2
  •  69
  •   Jon Skeet    9 年前

    我想你是说 Dictionary<TKey, TValue> 在第二种情况下? HashTable 是一个非泛型类。

    您应该根据自己的实际需求为作业选择正确的集合。你真的 希望 将每个键映射到一个值?如果是,使用 Dictionary<,> . 如果你 只有 把它当作一套,用 HashSet<> .

    我希望 HashSet<T>.Contains Dictionary<TKey, TValue>.ContainsKey (假设您明智地使用字典,这是可比较的操作)基本上执行相同的操作-它们基本上使用相同的算法。我想是因为 词典<,> 你越大,就越有可能用 词典<,> 比用 哈希集<> ,但我希望这与仅仅从您要实现的目标的角度选择错误数据类型的痛苦相比是微不足道的。

        3
  •  4
  •   Andrew Bezzub    14 年前

    这些是不同的数据结构。也没有通用版本的 HashTable .

    HashSet 包含类型t的值 散列表 (或) Dictionary )包含键值对。所以你应该选择收集你需要存储的数据。

        4
  •  4
  •   ripvlan    8 年前

    来自MSDN Dictionary文档<tKey,tValue>

    “使用键检索值非常快,接近 O(1) ,因为dictionary类是实现的 作为哈希表。

    附注:

    “检索速度取决于为tkey指定的类型的哈希算法的质量”

    我知道你的问题/帖子已经过时了,但在寻找类似问题的答案时,我偶然发现了这个问题。

    希望这有帮助。向下滚动到 评论 部分了解更多详细信息。 https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx