1. 程式人生 > >C# 陣列、ArrayList和List的區別

C# 陣列、ArrayList和List的區別

之前有點搞不清陣列、ArrayList和List<T>,感覺都能存放多個數據,但是又搞不清具體有什麼區別,今天重點看了下,首先就是陣列。

(1)陣列

//定義一個數組
int[] aaa = new int[3];
aaa[0] = 1;
aaa[1] = 2;
aaa[2] = 3;
由上面陣列的定義可以看出,陣列首先就要確定存放資料的型別,也就是說,陣列中存放的資料都是一樣的;其次,

陣列的長度都是固定好的,也就是在定義陣列的時候,要確定陣列可以存放多少個數據;再次,陣列可以具有多個維

度,當然上面的簡單程式碼沒有體現出來,比如要定義一個矩陣,就可以定義一個二維陣列。

由上面的程式碼還可以看出,陣列的賦值也是很簡單的,注意陣列第一個元素的角標是0。

(2)ArrayList

雖然陣列的賦值取值很方便,但陣列也有很多缺點,比如提前要知道陣列的長度,在陣列中插入元素比較麻煩,所

以有了ArrayList。ArrayList會隨著儲存資料的多少進行動態擴充,所以在定義一個ArrayList時是不需要提前確定長度

的。

//定義一個ArrayList
ArrayList alist = new ArrayList();
alist.Add(11);
alist.Add("aaa");
上面定義了一個ArrayList,可以看出不需要指定ArrayList例項alist的長度,往alist中新增資料時,呼叫Add方法即可;

同時,alist中可以存放不同的資料型別。所以ArrayList用起來也很方便,但也存在著問題,先看下面的程式碼

foreach(int a in alist)
{
    Console.WriteLine(a);
}

假如要列印alist中的資料,就會報錯,因為alist中可能存放多種資料型別,不是型別安全的。其次,由於alist中既可以

放值型別資料,又可以存放引用型別資料,因此就會存在裝箱和拆箱的操作,而裝箱和拆箱會損耗效能。

既然陣列和ArrayList都存在著缺點,那麼就引入泛型List<T>。

(3)List<T>

//宣告一個泛型List
List<int> list = new List<int>();
list.Add(111);
list.Add(222);

由上面宣告的泛型List可以看出,在例項一個List時,不需要確定長度,這和ArrayList一樣。同時,在宣告的時候,

泛型List的資料型別也確定了,這就保證了型別安全,同時也就沒有了裝箱和拆箱的操作,這就是泛型List的好處吧。

還要明的是泛型List只能是一維的。