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>.Contains
和Dictionary<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