現在已經很少使用ArrayList與Hashtable,除去取數據不方便之外,在加入元素以及其余操作時,花費的時間也是比較多的,效率低;對其解釋涉及到裝箱和拆箱的問題;
一、什么是裝箱和拆箱
裝箱:將數值類型轉換成引用類型的值
拆箱:將引用類型轉換成數值類型
int n = 10; object o = n;//裝箱 int nn = (int)o;//拆箱
二、裝箱與拆箱的判別
string str = "123"; int a = Convert.ToInt32(str);
上述代碼,雖然是由引用類型轉換成值類型;但是並沒有發生任何的裝箱和拆箱的操作;
首先應該判斷兩者是否是繼承關系,在判斷是否是拆箱和裝箱;上述代碼中,string類型與Int類型並不是繼承關系,所以不存在裝箱和拆箱的關系;
int b = 1233; IComparable c = b;
上述代碼發生了裝箱,首先int類型與IComparable類型是繼承關系;int繼承IComparable,又是由值類型轉換成引用類型,所以發生了裝箱;
三、檢驗裝箱操作的效率
第一組:
ArrayList arraylist = new ArrayList(); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i=0;i<1000000;i++) { arraylist .Add(i); } sw.Stop(); Console.WriteLine(sw.Elapsed);
輸出:00:00:00.0427016
第二組:
List<int> list = new List<int>(); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i=0;i<1000000;i++) { list.Add(i); } sw.Stop(); Console.WriteLine(sw.Elapsed);
輸出:00:00:00.0111906
第一組代碼耗時長一些,因為發生了裝箱;arrayList.Add();中的參數是Object類型的,輸入的是int類型,所以發生了由值類型到引用類型的轉換;
所以以后在寫代碼的過程中,盡量避開裝箱和拆箱操作,這樣會降低效率;