HashSet <T>与Dictionary <K,V> wrtsearch时间来查找是否存在一个项目

HashSet<T> t = new HashSet<T>(); // add 10 million items Dictionary<K, V> t = new Dictionary<K, V>(); // add 10 million items. 

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

只是为了澄清,我的要求是我有1000万对象(以及真正的string),我需要检查它们是否存在于数据结构中。 我永远不会迭代。

HashSet vs List vs Dictionary性能testing,取自这里 。

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

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

删除10000个集合的一半对象

在第二种情况下Dictionary<TKey, TValue>我认为你的意思是Dictionary<TKey, TValue>HashTable是一个非generics的类。

你应该根据你的实际需求select合适的工作集合。 你真的想把每个键映射到一个值吗? 如果是这样,请使用Dictionary<,> 。 如果你关心它,使用HashSet<>

我期望HashSet<T>.ContainsDictionary<TKey, TValue>.ContainsKey (这是类似的操作,假设你正在使用你的字典)基本上执行相同的操作 – 他们使用相同的algorithm,从根本上。 我猜在Dictionary<,>的条目越大,用Dictionary<,>比使用HashSet<>更有可能吹出caching,但我认为这与select错误的数据types只是根据你想要达到的目标而定。

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

HashSet包含HashTable (或Dictionary )包含键值对的typesT的值。 所以你应该select收集你需要存储的数据。

从Dictionary <TKey,TValue>的MSDN文档

“使用它的键检索值非常快,接近于O(1) ,因为Dictionary类是作为一个哈希表来实现的

附注:

“检索的速度取决于为TKey指定的types的哈希algorithm的质量”

我知道你的问题/post是旧的 – 但在寻找类似问题的答案时,我偶然发现了这个问题。

希望这可以帮助。 向下滚动到“ 备注”部分以获取更多详细信息。 https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx