ArrayList正確的使用可以極大的提示添加效率

1、ArrayList原理

ArrayList底層使用可變長度數組存儲元素

在初始化ArrayList時,如果沒有指定初始化容量或者指定0爲初始化容量,那初始化容量將默認爲10

在每次添加元素時,首先校驗容量是否滿足,如果不滿足使用Arrays.copyOf方法,以原來容量的1.5倍擴容

涉及到內存操作(創建新的數組,丟掉老的數組)導致效率比較低

在每次刪除元素時,使用Arrays.copyOf方法,將要刪除元素之後的所有元素的索引減一,最後一位置位NULL,和添加同理,涉及到內存操作,效率比較低

2、初始化ArrayList時指定初始化容量實驗

實驗代碼

    @Test
    public void test04(){
        loadData(0,1000);
        loadData(1000,1000);
        System.out.println("---------------------------");
        loadData(0,10000);
        loadData(10000,10000);
        System.out.println("---------------------------");
        loadData(0,100000);
        loadData(100000,100000);
        System.out.println("---------------------------");
        loadData(0,1000000);
        loadData(1000000,1000000);
        System.out.println("---------------------------");
        loadData(0,10000000);
        loadData(10000000,10000000);
    }

    public static void loadData(int initCapacity,int loopNum){
        Long start = System.currentTimeMillis();
        List list = new ArrayList(initCapacity);
        for(int i = 0 ; i < loopNum ; i ++){
            list.add(i);
        }
        Long end = System.currentTimeMillis();
        System.out.println("初始化容量:" + initCapacity + "\t 循環次數:" + loopNum + "\t用時:" + (end - start));

    }

結果1


結果2


結果3


從以上3個結果可以看出,在集合容量達到10萬到100萬之間,指定初始化容量效率有明顯提升,大事達到1000萬時,指定初始化容量效率就下降了,不知道爲啥,等待大佬評論,感謝。

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