在使用ArrayList這樣的非泛型集合的過程當中,要進行裝箱和拆箱操做,會有比較大的性能損失,而使用泛型集合就沒有這樣的問題。List是泛型,而ArrayList是非泛型。存數據島ArrayList都須要專程object,讀取又要轉換成相應的數據類型,List則不須要。
//用來記錄開始和結束的時間
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<T>,int類型在編譯器動態生成的類中本替換爲int型
//執行過程當中再也不執行裝箱拆箱操做
List<int> list2 = new List<int>();
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);
//顯示三次結果以下
/* 第一次
* 使用ArrayList的耗時 :92
* 使用泛型的耗時 :25
*
* 第二次
* 使用ArrayList的耗時 :96
* 使用泛型的耗時 :22
*
* 第三次
* 使用ArrayList的耗時 :90
* 使用泛型的耗時 :22
*
* 由此能夠明顯看出二者的差異
* 這裏僅僅是時間上的,並不包括對內存消耗的統計
*
* ※可是也要注意到差異的單位是毫秒,
* 我這裏只想說明用泛型是有好處的,
* 但也不可過度追求程序的孰優孰劣,
* 總之要把握好這個度,適合本身的纔是最好的
* O(∩_∩)O~
*/
Console.Read();java
java編程中咱們用最多的幾個類能夠就是String,ArrayList,HashMap了.特別是ArrayList咱們幾乎無人不知,甚至有亂用的嫌疑了咱們來看看ArrayList和LinkedList的區別.故名思意ArrayList是數組表,LinkedList是連接表.ArrayList的全部數據是在同一個地址上,而LinkedList的每一個數據都擁有本身的地址.
咱們來比較一下經常使用的數據的插入,數據的刪除,數據的更新,數據查詢.
數據插入 :好比在i節點插入一個新數據
ArrayList:循環到i節點,插入一個新數據,而後把i節點後面的全部的數據的index加1. ->操做多
LinkedList:循環到i節點,把前一個節點的後續連接到新數據,而後把新數據連接到後一個數據就能夠了. ->操做少
結論:平均效率LinkedList要好.
數據刪除 :好比刪除i節點數據
ArrayList:循環到i節點,而後把i節點後面的全部的數據的index減1. ->操做多
LinkedList:循環到i節點,把前一個節點的後續連接到i節點的後一個數據就能夠了. ->操做少
結論:平均效率LinkedList要好.
數據查詢 :好比查詢i節點數據
ArrayList:循環到i節點. ->操做少
LinkedList:循環到i節點. ->操做少,但因爲每一個數據的地址不同,查詢好比 ArrayList慢.
結論:平均效率 ArrayList要好.
數據更新 :好比更新i節點數據
ArrayList:循環到i節點,把數據更新. ->操做少
LinkedList:循環到i節點,把前數據更新. ->操做少,但因爲查詢速度沒有 ArrayList好,全部效率沒有 ArrayList好.
結論:平均效率ArrayList要好.
這樣咱們就能夠看到各有優勢.
若是查詢操做較多ArrayList的效果更好.若是刪除,插入較多LinkedList的效果較好.具體怎麼用還看具體的需求.編程
以上是雲棲社區小編爲您精心準備的的內容,在雲棲社區的博客、問答、公衆號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜索按鈕進行搜索int , 數據 , arraylist , 效率 , 類型 時間 arraylist linkedlist、linkedarraylist、linkedlist、java linkedlist、linkedlist線程安全,以便於您獲取更多的相關知識。數組