天天看點

ArrayList 集合中怎麼插入元素的

寫一個測試方法,建立一個集合,看看到底是怎麼執行插入操作的。

public static void test1(){
        
        //建立一個集合
        List<Integer> list =  new ArrayList<Integer>();
        list.add(1);
        list.add(7);
        list.add(5);
        list.add(8);
        System.out.println(list);
    }
           

控制台輸出:[1, 7, 5, 8]

ArrayList 提供了一個add()方法,當我們建立了一個集合對象,直接調用add()方法就可以插入指定類型的元素,但是add()方法到底是怎麼向集合中插入元素的呢?下面我們來分析一下。

ArrayList 集合中怎麼插入元素的

當執行插入操作的時候,首先

ensureCapacityInternal(size + 1)

,elementData[size] = e; size++;,這裡的size是ArrayList中定義的表示集合大小的成員變量。

ArrayList 集合中怎麼插入元素的

下邊我們看add 調用的ensureCapacityInternal方法

ArrayList 集合中怎麼插入元素的

elementData,EMPTY_ELEMENTDATA,DEFAULT_CAPACITY都是什麼意思

ArrayList 集合中怎麼插入元素的

也就是說當我們建立一個ArrayList集合的時候,預設會給我們配置設定一個容量為10的數組,至于怎麼擴容,我們再看 grow方法

ArrayList 集合中怎麼插入元素的

注意:這裡傳過來的minCapcatiy的值是size+1,能夠實作grow方法調用就肯定是(size+1)>elementData.length的情況,是以size就是初始最大容量或上一次擴容後達到的最大容量,是以才會進行擴容。

newCapacity=oldCapacity+(oldCapacity>>1),這裡就是擴容大小确定的地方,相當于新的最大容量是 size+1+size/2 相當于原來的1.5倍然後加1。

我們看到調用了Arrays工具類的 copyOf方法。

ArrayList 集合中怎麼插入元素的

最後我們看一下

System.arraycopy()

方法 ,會發現和remove()删除集合中的元素用的同一個方法,傳送門arraycopy方法

ArrayList 底層是數組的形式,是以支援重複元素,如果沒有指定大小,預設容量為10,當超過的預設容量的時候,會進行擴容,按照原來容量的1.5倍加1進行。當存入的集合數量一緻增加時,會一直進行擴容操作,是以如果預先知道需要的集合的大小,可以直接建立一個指定大小的ArrayList集合,可以避免重複數組copy的擴容操作。

繼續閱讀