我有一个简单的要求:我有数百万个字符串,并且想要测试它们是否存在于一个小集合中。我对使用List<T>
vs HashSet<T>
这一套有疑问。HashSet如何<T>。包含的速度比List <T> .Contains?
当需求相反时,例如,你有100个字符串,需要检查它们是否存在于一组数百万字符串中,我完全理解HashSet<T>
是最佳选择。
但在我的情况下,似乎.NET对HashSet<T>
调用Contains
的时候,所以调用List<T>
的Contains
可能会更快,计算哈希值数百万的(调用GetHashCode
)?
任何人都可以解释,如果这种假设是正确的?
非常好的答案!我找到了HybridDictionary类,在这里你可以将值存储为null,使它与我猜测的HashSet相同。 – Muis
@Joshua:如果没有一些具体的性能数据,我不会使用非泛型的'HybridDictionary'类(用于将键映射到值,而不仅仅用于包含元素)。 “List'和'HashSet '对你来说太慢了吗?请注意,'HybridDictionary'不知道切换点的合理位置 - 这取决于实际的数据,以及Equals vs GetHashCode调用的代价。 –
我目前使用HashSet,但有时它包含3个值,有时它包含数千个值,所以我在寻找类似于HybridHashset的东西,例如当item-count> 100时它会自动切换。我知道它不能准确计算'100',但估计可能会足够好。 –
Muis