C# HashSet集合型別使用介紹
1.HashSet集合
HashSet是以數學Set集合為基礎的,使用HashSet可以提高集合的運算。使用HashSet集合不自帶排序方法,如果需要排序的需求可以參考使用List<T>集合配合Sort方法。
HashSet的優勢在與運算快,作為一種存放在記憶體的資料,可以很快的進行設定和取值的操作。HashSet無法向裡面新增重複的資料,避免新增HashSet<T>裡面的資料重複。我們使用HashSet常常在集合相加集合相減這些集合與集合之間的操作之中。
使用HashSet作為記憶體儲存的快速資料庫,這個需要隨時跟新HashSet裡面的資料,因為在HashSet中一個長時間未被訪問的資料,將被系統自動回收掉,那麼就會導致失敗,那麼如何才能保證HashSet裡面的值是長存在的而且達到不斷的更新裡面的值呢?
首先程式過來訪問我們HashSet裡面有沒有需要的資料,如果有我們需要的資料就直接返回給使用者,不用呼叫查詢資料庫的操作。如果HashSet裡面沒有我們需要的資料,程式再去查詢一次資料庫是否有該Query資料,如果有返回給使用者同時把查詢的結果新增到HashSet裡面,這麼做可以一定程度的降低查詢資料庫所帶來的不便,但是不能根除,需要進一步提升效能,可以檢視前面的快取策略使用memcached來提高網站查詢和訪問。
1.1.我們要求兩個集合的並集
HashSet<int> numbers1; HashSet<int> numbers2; //分別進行numbers1和numbers2的值初始化或賦值 numbers1.UnionWith(numbers2);//求兩個集合的並集。
1.2.求兩個集合的交集HashSet<int> numbers1; HashSet<int> numbers2; //分別進行numbers1和numbers2的值初始化或賦值 numbers1.IntersectWith(numbers2);//求兩個集合的交集。
1.3.求兩個集合的差集
HashSet<int> numbers1; HashSet<int> numbers2; //分別進行numbers1和numbers2的值初始化或賦值 numbers1.ExceptWith(numbers2);//求兩個集合的差集。
1.4.求兩個集合的對稱差集
HashSet<int> numbers1; HashSet<int> numbers2; //分別進行numbers1和numbers2的值初始化或賦值 numbers1.SymmetricExceptWith(numbers2);//求兩個集合的對稱差集。
2.HashSet常用擴充套件方法
2.1.Add,將專案新增到HashSet之中。
2.2.Clear,清空HashSet裡面的值。
2.3.Remove,從HashSet中移除值。
2.4Contains,判斷HashSet是否包含指定專案。
2.4Equals(Object),判斷是否相等。
3.HashSet與Linq操作
HashSet<T>與LINQ的對等的方法
UnionWith ==> Union
IntersectWith ==> Interset
ExceptWith ==> Except
不提供排序 ==> Distinct
那麼我們已經有很多的集合型別如List<T> ,Dictionary<TKey,TValue>或Hashtable等這些集合型別,我們該如何選定我應該採用的哪一個集合型別呢?
“如果你必須建立新的設定,或則如果應用程式只需要存取提供的任務,那麼使用任何的IEnumerable<T>集合都已經足夠了。但是,如果應用程式需要存取其他值,或則不建議不需要建立新的集合,這時可使用HashSet<T>.”——摘自MSDN