C# 集合
阿新 • • 發佈:2020-06-22
集合分為線性集合和非線性集合。
線性集合:元素具有唯一的前驅和後驅的資料結構型別。
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個建議》陸敏技