比較List和ArrayList的性能及ArrayList和LinkedList優缺點

List和ArrayList的性能比較



在使用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

ArrayList和LinkedList優缺點



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線程安全,以便於您獲取更多的相關知識。數組

相關文章
相關標籤/搜索