.NET3.5多了個HasSet<T>用來存儲集合。從名稱可以看出,它是基於Hash的。可以簡單理解為沒有Value的Dictionary<TKey,TValue>。
HashSet<T>不能用索引訪問,不能存儲重復數據,元素T必須正確實現了Equals和GetHashCode。
那它的優勢是什麼呢?
檢索的性能。簡單的說它的Contains方法的性能在大數據量時比List<T>好得多。HashSet<T>的Contains方法復雜度是O(1),List<T>的Contains方法復雜度是O(n)。
那麼,在集合的目的是為了檢索的情況下,我們應該使用HashSet<T>代替List<T>。比如一個存儲關鍵字的集合,運行的時候通過其Contains方法檢查輸入字符串是否關鍵字。
HashSet<T>是專門設計用來做集合運算(取交集,並集等),所以提供了UnionWith、IntersectWith等方法。
另:如果數據量很小,那麼任然推薦使用List<T>。
這個“小”是多小呢?其實是用Hashtable還是ListDictionary時存在同樣的取捨問題,.NET為其設計了HybridDictionary類實現一個混合容器,當數量小於等於8(目前是8,不保證微軟以後不會變)的時候,HybridDictionary內部使用ListDictionary,當數量大於8的時候,HybridDictionary內部使用Hashtable。所以,如果我們知道我們集合的數量不會大於8的話,就算目的是為了檢索,任然推薦使用List<T>。
出處:http://www.cnblogs.com/zhucai