JAVA8 ArrayList源碼學(xué)習(xí)總結(jié)

一、ArrayList內(nèi)部有3個(gè)構(gòu)造方法,分別是:

1. ArrayList(),創(chuàng)建一個(gè)大小為10的空數(shù)組。
2. ArrayList(int initialCapacity),創(chuàng)建一個(gè)容量=initialCapacity的數(shù)組。
3. ArrayList(Collection<? extends E> c),創(chuàng)建一個(gè)包含所給集合的元素的數(shù)組。

二、當(dāng)調(diào)用add()或addAll(Collection<? extends E> c)時(shí),會(huì)先檢查數(shù)組容量,不夠的話會(huì)進(jìn)行擴(kuò)容,擴(kuò)容一般擴(kuò)大到原來(lái)的1.5倍,最大擴(kuò)大到Integer.MAX_VALUE。代碼如下:

private void grow(int minCapacity) {
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1); // 這里newCapacity為原來(lái)的1.5倍
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity); // hugeCapacity方法的實(shí)現(xiàn)是:newCapacity最大值為Integer.MAX_VALUE
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

三、內(nèi)部有2個(gè)toArray()方法,分別是:

public Object[] toArray(),返回一個(gè)object數(shù)組。
public <T> T[] toArray(T[] a),返回一個(gè)特定類型的數(shù)組,使用時(shí)需手動(dòng)創(chuàng)建一個(gè)新數(shù)組作為參數(shù)傳進(jìn)去。

四、ArrayList有個(gè)的modCount成員變量,當(dāng)調(diào)用add、addAll、remove、removeAll等方法修改數(shù)組時(shí),會(huì)執(zhí)行modCount++。modCount主要用于在使用迭代器遍歷數(shù)組時(shí)檢查數(shù)組大小是否被修改,如果被修改了,就拋出ConcurrentModificationException。以下是檢查的代碼:

if (modCount != expectedModCount) {  // expectedModCount是創(chuàng)建迭代器時(shí)的modCount,括號(hào)中的modCount是最新的modCount。
                throw new ConcurrentModificationException();
            }

五、內(nèi)部有3個(gè)迭代器類,分別是Itr,ListItr,ArrayListSpliterator。

Itr可以從前向后單向遍歷,在某個(gè)位置刪除元素。
ListItr可以雙向遍歷,在某個(gè)位置刪除增加元素。
ArrayListSpliterator是JAVA8新增的并行迭代器,內(nèi)部使用index(開(kāi)始下標(biāo))、fence(結(jié)束下標(biāo))控制遍歷的數(shù)組范圍,可以通過(guò)trySplit方法分割出另一個(gè)ArrayListSpliterator,從而把數(shù)組分成兩半,可以交給多個(gè)線程并行處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容