一:數組 優點:數組在記憶體中是連續存儲的、所以它的索引速度是非常快的、時間複雜度為O(1)、而且它的賦值/修改/獲取元素也是非常簡單的。 缺點:1、定義數組的時候需要指定數組的長度(過長會造成記憶體浪費、過短會導致程式異常System.IndexOutOfRangeException:"索引超出數組界 ...
一:數組
//定義 string[] strs = new string[5]; //賦值 strs[0] = "A"; strs[1] = "B"; //修改 strs[1] = "C"; //取值 string getStr = strs[1];
優點:數組在記憶體中是連續存儲的、所以它的索引速度是非常快的、時間複雜度為O(1)、而且它的賦值/修改/獲取元素也是非常簡單的。
缺點:1、定義數組的時候需要指定數組的長度(過長會造成記憶體浪費、過短會導致程式異常System.IndexOutOfRangeException:"索引超出數組界限")
2、插入和刪除元素效率低、也比較麻煩。
在不清楚數組長度的時候、就很尷尬了。 所以C#提供了ArrayList了來處理這些問題...
二:ArrayList
使用大小會根據需要動態增加的數組。
//初始化 ArrayList list = new ArrayList(); //添加元素 list.Add(1); list.Add("A"); list.Add(0.1); //修改元素 list[2] = "B"; //指定索引插入元素 list.Insert(1, "ABC"); //移除元素 list.RemoveAt(1);
優點:1、ArrayList大小會根據需要動態增加的數組。
2、實現了IList介面、可以方便的對數據進行添加、插入和刪除。
缺點:1、ArrayList會把插入的數據都當做object類型來存儲、在操作數據的時候可能會因為類型不匹配而出現異常、它是非類型安全的對象。
2、由於存儲的是object類型、在使用的時候進行類型轉換、會造成裝箱拆箱、從而損耗性能。
裝箱:把值類型轉換成引用類型;
拆箱:把引用類型轉換成值類型。
//裝箱 int i = 1; object obj = (object)i; //拆箱 int j = (int)obj;
由於ArrayList存在類型不安全、裝箱拆箱損耗性能。.NET Framework 2.0 推出了List<T>
三:List<T>
表示可通過索引訪問的對象的強類型列表。 提供用於對列表進行搜索、排序和操作的方法。
//初始化 List<int> list = new List<int>(); //添加 list.Add(12); list.Add(34); //編譯器會進行類型驗證、下麵代碼編譯失敗 //list.Add("ABC"); //修改 list[0] = 1; //移除 list.RemoveAt(0);
優點:由於泛型List是強類型、編譯器會驗證類型安全。這樣就避免了類型的不安全、以及數據強制轉換導致裝箱拆箱損耗性能。