1:數組html
1 string[] strs = new string[5]; 2 //賦值 3 strs[0] = "0"; 4 strs[1] = "1"; 5 //修改 6 strs[1] = "burg"; 7 //刪除 無法刪除 除非轉化爲可變數組list<string> 8 9 //取值 10 string str = strs[0];
優勢:數組是定義的是 是分配在一段連續的內存空間上,且大小肯定,這樣是的數組的索引效率很是高,只要偏移地址就能夠快速訪問元素,因此數組的查詢,賦值,更新 效率較高 複雜度o(1)算法
缺點:猶豫數組分配在一段連續的地址上 因此致使 存儲效率較低,在插入 和刪除 元素的時候 比較麻煩 若是插入一個元素 會致使插入元素後面的元素 位置所有移動,刪除也是同理數組
2:ArrayList安全
ArrayList arrayList = new ArrayList(); //賦值 arrayList.Add(1); arrayList.Add("string"); arrayList.Add(true); //修改 arrayList[0] = 2; //刪除 arrayList.RemoveAt(3);//刪除第三個元素 //指定索引插入元素 arrayList.Insert(1, "ABC"); //取值 string a = (string)arrayList[0];
優勢:繼承了IList 接口 提供了不少便捷的方法去操做數組,數組的長度可變不在固定數據結構
確點:數組裏面的數據類型 不惟一 到是使用的時候 數據類型不安全 ,取值出來的時候 都是object 類型,使用的時候會致使不少 裝箱 拆箱的問題 ,致使性能的損耗性能
3:List<T> 優化
List<string> list = new List<string>(); list.Add("burg"); list.Add("xun"); list[1] = "A"; list.RemoveAt(1); list.Insert(1, "B"); string listStr = list[0];
泛型List:一樣繼承了IList 接口 提供了方便的 操做數組的方法,同時規定了 集合類型 使得數據類型安全 避免了裝箱拆箱的問題spa
數組集合。 查詢、修改、新增(尾部新增)快,刪除、新增(隊列中間)慢,適用於查詢、修改較多的場景.net
HashTable是一種根據key查找很是快的鍵值數據結構,不能有重複key,並且因爲其特色,其長度老是一個素數,因此擴容後容量會比2倍大一點點,加載因子爲0.72f。設計
當要大量使用key來查找value的時候,HashTable無疑是最有選擇,HashTable與ArrayList同樣,是非泛型的,value存進去是object,存取會發生裝箱、拆箱,因此出現了Dictionary<T,T>。
Dictionary<T,T>是HashTable的泛型版本,存取一樣快,可是不須要裝箱和拆箱了。並且,其優化了算法,Hashtable是0.72,它的浪費容量少了不少。
List<T>,ArrayList,Hashtable等容器類,其內部維護的是數組Array來,ListDictionary和LinkedList<T>不用Array,而是用鏈表的形式來保存。鏈表最大的好處就是節約內存空間。
ListDictionary是單向鏈表。
LinkedList<T>雙向鏈表。雙向鏈表的優點,能夠插入到任意位置。
HashSet<T>類,算法,存儲結構都與哈希表相同,主要是設計用來作高性能集運算的,例如對兩個集合求交集、並集、差集等。集合中包含一組不重複出現且無特定順序的元素。
ArrayList,List<T>:變長數組;
HashTable,Dictionary<T,T>:頻繁根據key查找value;
HashSet<T>:集合運算;
Queue、Queue<T>:先進先出;
Stack、Stack<T>:堆棧,先進後出;
SortedList、SortedList<TKey,TValue>:哈希表,要經過下標,又要經過key取值時,可選用;
ListDictionary:單向鏈表,每次添加數據時都要遍歷鏈表,數據量大時效率較低,數據量較大且插入頻繁的狀況下,不宜選用。
LinkedList<T>:雙向鏈表;
HybridDictionary:未知數據量大小時,可用。
SortedDictionary<TKey,TValue>:SortedList<TKey,TValue>的優化版,內部數組轉平衡二叉樹。
BitArray:二進制運算時可選用;
內容引用於:https://blog.csdn.net/wildlifeking/article/details/58605587