c#的幾種數據結構

Array/ArrayList/List/LinkedList/Queue/Stack/HastSet/SortedSet/Hashtable/SortedList/Dictionary/SortedDictionarynode

數組(在內存上連續分配,讀取快,增刪改慢,可座標訪問)數組

一:Array-----在內存上連續分配的,並且元素類型是同樣的,能夠座標訪問,讀取快,增刪改慢,長度不變安全

二:ArrayList------不定長度,連續分配的,元素沒有類型限制,任何元素都是看成 object處理,若是是值類型會有裝箱操做,索引賦值不會增長長度會出錯spa

三:List-------核心本質也是Array,內存上都是連續擺放不定長的(連續擺放的均可以用索引訪問),泛型(保證類型安全避免裝箱拆箱)線程

鏈表(元素不連續分配每一個元素都有記錄先後節點,增刪快,查慢)對象

四:LinkedList--------泛型的特色,元素不連續分配,每一個元素都有記錄先後節點,不能下標訪問,找元素就只能遍歷,查找不方便,增刪方便排序

LinkedList<int> linkedList = new LinkedList<int>();
//linkedList[3]  不可下標訪問
linkedList.AddFirst(123);   添加方式
linkedList.AddLast(456);索引

bool isContain = linkedList.Contains(123);
LinkedListNode<int> node123 = linkedList.Find(123); //元素123的位置 從頭查找
linkedList.AddBefore(node123, 123); 
linkedList.AddAfter(node123, 9);內存

linkedList.Remove(456);
linkedList.Remove(node123);
linkedList.RemoveFirst();
linkedList.RemoveLast();
linkedList.Clear();hash

五:Queue------先進先出,可用來聽任務延遲執行(A不斷寫入B不斷獲取)

     1:Dequeue方法是移除,Peek方法不移除

六:Stack-------先進後出

     1:Pop方法是移除,Peek方法不移除

 集合(Hash分佈,元素間不要緊,動態增長容量,去重)

七:HashSet-------可用在間接關注/粉絲合集

  1. hashSet1.SymmetricExceptWith(hashSet);//補
  2. hashSet1.UnionWith(hashSet);//並
  3. hashSet1.ExceptWith(hashSet);//差
  4. hashSet1.IntersectWith(hashSet);//交

八:SortedSet-----可排序

Key-Value(增刪改快,浪費了空間,數據量大的話效率會低,非線程安全)

九:Hashtable------key-value形式,無序,體積能夠動態增長,拿着key計算一個地址而後放入key-vlaue,都是object有裝箱拆箱,若是不一樣的key獲得相同的地址,第二個在前面的地址上+1,查找 的時候若是地址對應的數據Key不對就+1查找;浪費了空間,若是數據太多重複定位效率就下去了,是基於數組實現,增刪查改數據一次定位速度快。線程安全(只有一個線程寫多個線程讀)

十:Dictionary------有序,數據太多的話效率就會降低,非線程安全,ConcurrentDictionary這個是線程安全的字典

十一:SortDictionary-----排序

十二:SortedList-------排序,不能Add()重複添加相同的key

線程安全的

ConcurrentQueue 線程安全版本的Queue
ConcurrentStack線程安全版本的Stack
ConcurrentBag線程安全的對象集合
ConcurrentDictionary線程安全的Dictionary
BlockingCollection

若是實現了IList了的就能夠用下標訪問,實現IConllection了的能夠用Add添加

相關文章
相關標籤/搜索