Dot-Net

List<T>.Contains() 很慢?

  • May 5, 2009

誰能解釋一下為什麼泛型List.Contains()函式這麼慢?

我有List&lt;long&gt;大約一百萬個數字,並且程式碼不斷檢查這些數字中是否有特定數字。

我嘗試使用Dictionary&lt;long, byte&gt;andDictionary.ContainsKey()函式做同樣的事情,它比使用 List 快 10-20 倍。

當然,我真的不想為此目的使用 Dictionary,因為它不應該以這種方式使用。

所以,這裡真正的問題是,是否有任何替代方法List&lt;T&gt;.Contains(),但不像Dictionary&lt;K,V&gt;.ContainsKey()?

如果您只是檢查是否存在,那麼HashSet&lt;T&gt;在 .NET 3.5 中是您的最佳選擇 - 類似字典的性能,但沒有鍵/值對 - 只有值:

   HashSet&lt;int&gt; data = new HashSet&lt;int&gt;();
   for (int i = 0; i &lt; 1000000; i++)
   {
       data.Add(rand.Next(50000000));
   }
   bool contains = data.Contains(1234567); // etc

引用自:https://stackoverflow.com/questions/823860