一、C#集合的命名空間
1.System.Collections //非泛型集合
2.System.Collections.Generic //泛型集合
3.System.Collections.Specialized //特定集合
4.System.Collections.Concurrent //支持並發的線程安全集合
5.System.Collections.ObjectModel //可觀察的集合,該命名空間下的ObservableCollection集合類專用於WPF,
其特性是集合屬性發生變化時可將變更通知到UI以便及時刷新UI.
二、常見集合接口表
C#常見集合接口
|
|||
接口
|
用途
|
||
非泛型接口
|
IEnumerator
|
||
IEnumerable
|
|||
ICollection
|
|||
IDictionary
|
|||
IList
|
|||
泛型接口
|
IEqualityComparer<T>
|
相等性比較
|
|
IComparer<T>
|
排序
|
||
IEnumerator<T>
|
枚舉器接口,用於遍歷集合元素(實現該接口將能夠享受foreach語法糖)。
|
||
IColletion<T>
|
提供獲取集合基本屬性和操作的方法,包括
元素個數、
清空集合、
添加元素、
刪除元素、
元素包含檢驗、
集合范圍復制
|
||
IList<T>
|
獲取或移除指定位置元素(索引訪問方式)、
在指定位置插入元素
計算指定元素位置
|
||
IDictionary<TKey,TValue>
|
訪問鍵和值的接口
|
||
ISet
|
集合的布爾操作接口,包括集合的並、交、差、(真)子集和(真)超集檢驗等
|
||
IProducerConsumerCollection<T>
|
支持線程安全的接口(
.NET 4增加
)
|

三、常見集合表
C#常見集合表(注意:n/a為not applicatable,表示該操作不能應用於該類型集合)
|
||||||||
分類
|
集合名稱
|
元素訪問方式
|
增加
|
插入
|
刪除
|
排序
|
檢索
|
特點
|
非關聯性集合
|
List<T>
(列表)
|
Index
|
如果集合必須重置大小,就是O(1)或O(n)
|
O(n)
|
O(n)
|
O(n,logn),最壞情況是O(n^2)
|
①當重置集合大小時將會增加時間復雜度
②功能齊全方便,適用於小型集合
|
|
LinkedList<T>
(雙向鏈表)
|
只能選擇從頭或尾部按照前后關系遍歷訪問
|
O(1)
|
O(1)
|
O(1)
|
n/a
|
n/a
|
①訪問效率低下,必須從頭尾遍歷
②元素的添加和刪除非常高效
|
|
Queue<T>
(隊列)
|
只能獲取底部元素
|
如果集合必須重置大小,就是O(1)或O(n)
|
n/a
|
O(1)
|
n/a
|
n/a
|
FIFO
|
|
Stack<T>
(棧)
|
只能獲取頂部元素
|
n/a
|
O(1)
|
n/a
|
n/a
|
FILO
|
||
HashSet
|
只能通過IEnumerator遍歷訪問
|
O(1)或O(n)
|
O(1)
|
n/a
|
n/a
|
①均實現ISet接口,ISet接口表示集,所謂集為不含重復元素的集合,因此可保證元素的唯一性
②
支持集合運算
(並、交、差、(真)子集、(真)超集關系運算)
|
||
SortedSet
|
O(1)或O(n)
|
O(1)
|
n/a
|
n/a
|
||||
關聯性集合
|
Dictionaty<TKey,TValue>
|
Key
|
O(1)或O(n)
|
n/a
|
O(1)
|
n/a
|
n/a
|
排序、檢索性能取決於TKey實現的GetHashCode方法
|
SortedDictionary<TKey,TValue>
|
Key
|
O(logN)
|
n/a
|
O(logN)
|
n/a
|
n/a
|
||
SortedList<TKey,TValue>
|
Key
|
無序數據為O(n);
如果必須重置大小就是O(n);
到列表尾部就是O(logN)
|
n/a
|
O(n)
|
n/a
|
n/a
|
||
Lookup<TKey,TValue>
|
Key
|
①一鍵多值
②無構造函數,僅能通過靜態擴展方法ToLookup創建
|
||||||
位數組
|
BitArray
|
Index
|
可基於int數組A創建位數組B,A中的每一個數字將轉換為32位二進制形式,並將每一bit位值轉換為true/false,最終B中的值只有true/false兩種取值
|
|||||
BitVector32
|
①最多32位的位數組
②值類型,性能比BitArray高
|
|||||||
並發集合
|
ConcurrentQueue
|
|||||||
ConcurrentStack
|
||||||||
ConcurrentBag
|
||||||||
ConcurrentDictionnary
|
||||||||
BlockingCollection
|