LinkedList和ArrayList在尾部插入數據效率對比

轉載於:https://blog.csdn.net/qq_34144916/article/details/81154528

做這個實驗之前,我的猜想的是:因爲每次都是在尾部插入數據,而LinkedLiist裏面有一個last指針一直指向最後一個元素,而ArrayList則根據索引來找到最後一個元素,那麼,這兩個方式中,效率應該是差不多的;

但是實驗結果卻不是這樣的;

先看代碼:

package 源碼測試;
 
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
 
public class arraylist_linkedlist {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int num=sc.nextInt();
            ArrayList alist=new ArrayList();
            LinkedList llist=new LinkedList();
            long startTime = System.currentTimeMillis();    //獲取開始時間
            
            for(int i=0;i<num;i++){
                alist.add(i);
            }   //測試的代碼段
            
            long endTime = System.currentTimeMillis();    //獲取結束時間
            
            System.out.println("ArrayList程序運行時間:" + (endTime - startTime) + "ms");    //輸出程序運行時間
            
            long startTime1 = System.currentTimeMillis();    //獲取開始時間
            
            for(int i=0;i<num;i++){
                llist.add(i);
            }   //測試的代碼段
            
            long endTime1 = System.currentTimeMillis();    //獲取結束時間
            
            System.out.println("LinkedList程序運行時間:" + (endTime1 - startTime1) + "ms");    //輸出程序運行時間
        }
    }
}
                                                                                                                                                                         

當輸入的數據一直是小於千萬級別的時候,大部分是Linked效率高,後來翻開源碼,我猜想應該是當出現ArrayList擴容的時候,會效率降低,所以ArrayList的效益比較低。而當數據量大於千萬級別的時候,就會出現ArrayList的效率比較高了。爲什麼呢?

比較源碼:

原來 LinkedList每次增加的時候,會new 一個Node對象來存新增加的元素,所以當數據量小的時候,這個時間並不明顯,而ArrayList需要擴容,所以LinkedList的效率就會比較高,其中如果ArrayList出現不需要擴容的時候,那麼ArrayList的效率應該是比LinkedList高的,當數據量很大的時候,new對象的時間大於擴容的時間,那麼就會出現ArrayList'的效率比Linkedlist高了。
 

 

arraylist 默認初始容量爲 10 ,擴容機制 乘於 1.5 +1

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章