C# 中數組、ArrayList、List 區別

一:數組數組

//定義
string[] strs = new string[5];
 
//賦值 
strs[0] = "A";
strs[1] = "B";

//修改
strs[1] = "C";

//取值
string getStr = strs[1];

 

優勢:數組在內存中是連續存儲的、因此它的索引速度是很是快的、時間複雜度爲O(1)、並且它的賦值/修改/獲取元素也是很是簡單的。安全

缺點:一、定義數組的時候須要指定數組的長度(過長會形成內存浪費、太短會致使程序異常System.IndexOutOfRangeException:"索引超出數組界限")性能

   二、插入和刪除元素效率低、也比較麻煩。spa

在不清楚數組長度的時候、就很尷尬了。 因此C#提供了ArrayList了來處理這些問題...code

 

二:ArrayList對象

使用大小會根據須要動態增長的數組。blog

//初始化
ArrayList list = new ArrayList();

//添加元素
list.Add(1);
list.Add("A");
list.Add(0.1);

//修改元素
list[2] = "B";

//指定索引插入元素
list.Insert(1, "ABC");
            
//移除元素
list.RemoveAt(1);

優勢:一、ArrayList大小會根據須要動態增長的數組。排序

   二、實現了IList接口、能夠方便的對數據進行添加、插入和刪除。索引

缺點:一、ArrayList會把插入的數據都當作object類型來存儲、在操做數據的時候可能會由於類型不匹配而出現異常、它是非類型安全的對象。接口

   二、因爲存儲的是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是強類型、編譯器會驗證類型安全。這樣就避免了類型的不安全、以及數據強制轉換致使裝箱拆箱損耗性能。

相關文章
相關標籤/搜索