我有一個簡單的要求:我有數百萬個字符串,並且想要測試它們是否存在於一個小集合中。我對使用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