程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 用HashSet代替List

用HashSet代替List

編輯:關於.NET

.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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved