C# 基礎至集合-數組、List、ArrayList、LinkedList、HashMap的一些區別

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

4:HashTable(哈希表)、Dictionary<T,T>

HashTable是一種根據key查找很是快的鍵值數據結構,不能有重複key,並且因爲其特色,其長度老是一個素數,因此擴容後容量會比2倍大一點點,加載因子爲0.72f。設計

當要大量使用key來查找value的時候,HashTable無疑是最有選擇,HashTable與ArrayList同樣,是非泛型的,value存進去是object,存取會發生裝箱、拆箱,因此出現了Dictionary<T,T>。

Dictionary<T,T>是HashTable的泛型版本,存取一樣快,可是不須要裝箱和拆箱了。並且,其優化了算法,Hashtable是0.72,它的浪費容量少了不少。

5:ListDictionary(單向鏈表),LinkedList<T>(雙向鏈表)

List<T>,ArrayList,Hashtable等容器類,其內部維護的是數組Array來,ListDictionary和LinkedList<T>不用Array,而是用鏈表的形式來保存。鏈表最大的好處就是節約內存空間。

ListDictionary是單向鏈表。

LinkedList<T>雙向鏈表。雙向鏈表的優點,能夠插入到任意位置。

6:HashSet<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

相關文章
相關標籤/搜索