C# Collections

Array

List

Dictionary

Immutable Collections

Concurrent Collentions

Array 可以foreach顯示順序就是當初設定的順序 , Zero-index 0是第一個 ,
new array 就必須設定長度 只給長度沒給值 每個值就會是default<T>

Q1 Why Array can forecah (string 也可以)   List<T> 是最常用的
A :因為Array string List 都有繼承 IEnumerable , 所以你要把自定物件 也可以支援foreach 就是去實作IEnumerable

List Add Item 時 是放到最後一個 比較沒有效能問題 ,
Insert / Remove  到任意index 會有效能問題 因為每個Item 都會後搬移 尤其是在很前面

Dictionary 沒有index的概念 所以沒有Insert

LINQ 是 read-only概念 沒有新增刪除item 只能選取創新物件

Collection Type 都是 參考型別 所以兩個內容完全相同的 集合 用 == 比較 會是false

要比較集合內容是否一樣 可以用 SequenceEqual (真的去一個一個item比較)

O(1) 最快 (不管集合大小都不會改變)
O(N) 會看集合大小 改變速度
for 裡面用到O(N) 就會變成 O(N2)

List 的 Find 是 O(N) , 而 Dictionary 的 TryGetValue 是 O(1)

SortedDictionary 跟 SortedList 要排序key 而key是自訂物件 要用 overwrite Equality 跟 == , != , GetHashCode

超大集合 用List 新增移除 會有效能問題 , 可以改用 LinkList
因為 LinkList 每一個item 會紀錄上一個記憶體位置跟下一個記憶體位置 不需要搬移記憶體

Stack 後進先出  彈夾的概念 最後裝的子彈 會最先擊發 push , pop

Queue 先進先出  排隊的概念  先到的人 先上車  enqueue  ,  dequeue  

Stack 跟 Queue 都有 peek 可以先看一下 下個item 是誰(只是看 沒有移除)

Immutable Collections 是Thread-safe

如果內容有誤請多鞭策謝謝