1. 程式人生 > WINDOWS開發 >C# 集合

C# 集合

集合分為線性集合和非線性集合。


線性集合:元素具有唯一的前驅和後驅的資料結構型別。

1、直接儲存:該型別的集合資料元素可以直接通過下標index來訪問(Array(陣列、List<T>),string,struct)。

  • 優點:向資料結構中新增元素很高效,直接放在資料末尾的第一個空位上就可以了。
  • 缺點:插入元素低效,需要給插入的元素騰出位置並順序移動後面的元素。
  • 陣列和List<T>的選擇:如果集合的數目固定並且不涉及轉型,使用陣列效率高,否則使用List<T>。

2、順序儲存:即線性表,可動態地擴大和縮小,在一片連續的區域中儲存資料元素(佇列Queue<T>,棧Stack<T>,索引群集(字典Dictionary<TKey,TValue>、雙向連結串列LinkedList<T>))。

  • 缺點:不能按照索引進行查詢元素,查詢效率相對低。需要通過對地址的引用來搜尋元素,為了找到某個元素,線性表必須遍歷所有元素,直到找到對應的元素為止。
  • 優點:插入和刪除資料效率高。
  • 佇列Queue<T>:遵循先入先出的模式,在集合末尾新增元素,在集合的起始位置刪除元素,可以用於處理訊息佇列等場景。
  • 棧Stack<T>:遵循後入先出的模式,在集合末尾新增元素,同時也在集合末尾刪除元素。
  • 字典Dictionary<TKey,TValue>:儲存鍵值對,值在基於鍵的雜湊碼的基礎上進行儲存,可以根據建進行值的查詢。
  • 雙向連結串列LinkedList<T>:是一個型別為LinkedListNode的元素物件的集合。當護額的在集合中插入和刪除資料很慢時,可以考慮使用連結串列。


非線性集合:既有多個前驅和後驅的資料結構型別。

1、層次集合:樹

2、組集合:集HashSet<T>、圖。

  • 集HashSet<T>:存放在集合中的元素是無序且唯一。

以上的集合型別的擴充套件:

1、將無序排列的元素變為有序排列。

  • SortedList<T> 對應 List<T>
  • SortedDictionary<TKey,TValue> 對應 Dictionary<TKey,TValue>
  • StoredSet<T>對應 HashSet<T>

2、執行緒集合類:被用於多執行緒,保證執行緒安全

  • ConcurrentBag<T> 對應 List<T>
  • ConcurrentDictionary<TKey,TValue> 對應Dictionary<TKey,TValue>
  • ConcurrentQueue<T>對應 Queue<T>
  • ConcurrentStack 對應 Stack<T>

參考:《編寫高質量程式碼改善C#程式的157個建議》陸敏技