常用集合介面系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合類系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html 常用集合類: 數組(Array)的不足(即:集合與數組的區別) 1 ...
常用集合介面系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html
常用集合類系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html
常用集合類:
數組(Array)的不足(即:集合與數組的區別)
1. 數組是固定大小的,不能伸縮。雖然System.Array.Resize這個泛型方法可以重置數組大小,但是該方法是重新創建新設置大小的數組,用的是舊數組的元素初始化。隨後以前的數組就廢棄!而集合卻是可變長的。
2. 數組要聲明元素的類型,集合類的元素類型卻是object。
3. 數組可讀可寫不能聲明只讀數組。集合類可以提供ReadOnly方法以只讀方式使用集合。
4. 數組要有整數下標才能訪問特定的元素,然而很多時候這樣的下標並不是很有用。集合也是數據列表卻不使用下標訪問。很多時候集合有定製的下標類型,對於隊列和棧根本就不支持下標訪問!
數組列表(ArrayList)
ArrayList可以存儲任何類型,不像List泛型那樣有嚴格要求,List<T>更有效,ArrayList就相當於是List<object>。
ArrayList類對象被設計成為一個動態數組類型,其容量會隨著需要而適當的擴充方法:
1:Add()向數組中添加一個元素
2:Remove()刪除數組中的一個元素
3:RemoveAt(int i)刪除數組中索引值為i的元素
4:Reverse()反轉數組的元素
5:Sort()以從小到大的順序排列數組的元素
6:Clone()複製一個數組
System.Collections命名空間包含介面和類,這些介面和類定義各種對象(如列表、隊列、位數組、哈希表和字典)的集合。System.Collections.Generic 命名空間包含定義泛型集合的介面和類,泛型集合允許用戶創建強類型集合,它能提供比非泛型強類型集合更好的類型安全性和性能。System.Collections.Specialized 命名空間包含專用的和強類型的集合,例如,鏈接的列表詞典、位向量以及只包含字元串的集合。
列表(List)
可通過索引訪問的對象的強類型列表。提供用於對列表進行搜索、排序和操作的方法,在決定使用List還是使用ArrayList類(兩者具有類似的功能)時,記住List類在大多數情況下執行得更好並且是類型安全的。如果對List類的類型T使用引用類型,則兩個類的行為是完全相同的。但是如果對類型T使用值類型,則需要考慮實現和裝箱問題。
如果對類型T使用值類型,則編譯器將特別針對該值類型生成List類的實現。這意味著不必對List對象的列表元素進行裝箱就可以使用該元素,並且在創建大約500個列表元素之後,不對列表元素裝箱所節省的記憶體將大於生成該類實現所使用的記憶體。
哈希表(HashTable)
一、哈希表(Hashtable)簡述
在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用於處理和表現類似key/value的鍵值對,其中key通常可用來快速查找,同時key是區分大小寫;
value用於存儲對應於key的值。Hashtable中key/value鍵值對均為object類型,所以Hashtable可以支持任何類型的key/value鍵值對.
二、哈希表的簡單操作
在哈希表中添加一個key/value鍵值對:HashtableObject.Add(key,value);
在哈希表中去除某個key/value鍵值對:HashtableObject.Remove(key);
從哈希表中移除所有元素:HashtableObject.Clear();
判斷哈希表是否包含特定鍵key:HashtableObject.Contains(key);
字典(Directonary)
Hashtable和Dictionary<K, V>類型
1:單線程中推薦使用Dictionary,有泛型優勢,且讀取速度較快,容量利用更充分.
2:多線程中推薦使用Hashtable,預設Hashtable允許單線程寫入, 多線程讀取對Hashtable進一步調用Synchronized()方法可以獲得完全線程安全的類型,而Dictionary非線程安全,必須人為使用lock語句進行保護, 效率大減。
3:Dictionary有按插入順序排列數據的特性(註:但當調用Remove()刪除過節點後順序被打亂), 因此在需要體現順序的情境中使用Dictionary能獲得一定方便。
HashTable應用場合:做對象緩存,樹遞歸演算法的替代,和各種需提升效率的場合。HashTable中的key/value均為object類型,由包含集合元素的存儲桶組成。存儲桶是 HashTable中各元素的虛擬子組,與大多數集合中進行的搜索和檢索相比,存儲桶可令搜索和檢索更為便捷。每一存儲桶都與一個哈希代碼關聯,該哈希代碼是使用哈希函數生成的並基於該元素的鍵。HashTable的優點就在於其索引的方式,速度非常快。如果以任意類型鍵值訪問其中元素會快於其他集合,特別是當數據量特別大的時候,效率差別尤其大。
排序列表(SortedList)
與哈希表類似,區別在於SortedList中的Key數組排好序的
名-值集合(NameValueCollection)
NameValueCollection與HashTable很類似,但是他們還是有區別的,HashTable 的KEY是唯一性,而NameValueCollection則不唯一
堆棧(Stack)
表示對象的簡單的後進先出非泛型集合。Push方法入棧,Pop方法出棧
隊列(Queue)
隊列先進先出,enqueue方法入隊列,dequeue方法出隊列