1. 程式人生 > >C# 中數組、ArrayList、List<T> 區別

C# 中數組、ArrayList、List<T> 區別

對象 推出 代碼 color move object 失敗 gets ram

一:數組

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

C# 中數組、ArrayList、List<T> 區別