c#的幾種數據結構


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

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

一:Array-----在內存上連續分配的,而且元素類型是一樣的,可以坐標訪問,讀取快,增刪改慢,長度不變

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

三: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();

五: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添加

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM