天天看點

java非泛型集合_C# 泛型集合List與非泛型集合ArrayList之性能比較

在使用ArrayList非泛型集合時,要進行裝箱和拆箱操作,會有比較大的性能損失,

而使用泛型集合,則不會有這樣的問題。

之前我們也介紹過一篇類似的文章C#泛型 與 非泛型性能比較 類型安全的執行個體代碼,大家可以看看。

今天我們用一個例子做下測試,以加深了解。

代碼如下:

複制代碼 代碼示例:

//用來記錄開始和結束的時間

DateTime startTime = new DateTime();

DateTime endTime = new DateTime();

//定義集合類型ArrayList的一個執行個體

ArrayList list = new ArrayList();

//取得目前時間

startTime = DateTime.Now;

//★★★★★★★★①使用ArrayList類★★★★★★★★

//ArrayList的add方法的參數是Object型,

//當我們把int型作為參數傳入的時候需要做裝箱操作

//裝箱操作将值類型轉化為Object類型

for (int i = 0; i < 1000000; i++)

{

list.Add(i);

}

int iCount = 0;

//當我們使用int型的時候需要做拆箱操作操作

//拆箱操作将應用類型轉化為Object類型,拆箱過程要做大量的工作

foreach (int i in list)

{

iCount += 1;

}

Console.WriteLine("使用ArrayList的結果 : {0}", iCount.ToString());

//取得結束時間并計算內插補點

endTime = DateTime.Now;

TimeSpan ts = endTime - startTime;

Console.WriteLine("使用ArrayList的耗時 :" + ts.TotalMilliseconds);

//★★★★★★★★②使用泛型類★★★★★★★★

//使用List的泛型定義List,int類型在編譯器動态生成的類中本替換為int型

//執行過程中不再執行裝箱拆箱操作

List list2 = new List();

startTime = DateTime.Now;

for (int i = 0; i < 1000000; i++)

{

list2.Add(i);

}

iCount = 0;

foreach (int i in list2)

{

iCount += 1;

}

Console.WriteLine("使用泛型的結果 : {0}", iCount.ToString());

endTime = DateTime.Now;

ts = endTime - startTime;

Console.WriteLine("使用泛型的耗時 :" + ts.TotalMilliseconds);

//三次測試結果分别如下

Console.Read();