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


1:數組

 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 接口  提供了方便的 操作數組的方法,同時規定了 集合類型  使得數據類型安全  避免了裝箱拆箱的問題

數組集合。 查詢、修改、新增(尾部新增)快,刪除、新增(隊列中間)慢,適用於查詢、修改較多的場景

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


免責聲明!

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



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