ArrayList源碼剖析




比如,在一個(gè)已經(jīng)添加了0 1 2 3 4的ArrayList中進(jìn)行add(5)操作,首先進(jìn)行擴(kuò)容檢查ensureCapacity(size + 1),然后把5放在下標(biāo)為5的位置,把size指針往后移動(dòng)。正果時(shí)間復(fù)雜度為O(1)。





假如進(jìn)行add(2,6),要在數(shù)組下標(biāo)為2的位置插入6這個(gè)元素,首先會(huì)進(jìn)行邊界檢查防止插入位置不合法,然后進(jìn)行擴(kuò)容檢查,之后會(huì)把2,3,4,5往后復(fù)制,復(fù)制之后index為2的位置還是2,此時(shí)把6替換2,size指針任然要往后移動(dòng)。整個(gè)過(guò)程時(shí)間空間復(fù)雜度都是O(n).







如上代碼,在一個(gè)已有元素【0,1,2,3,4,5,6】的列表刪除數(shù)組下標(biāo)為2的元素,首先會(huì)檢查下標(biāo)范圍是否合法,然后把index后面的數(shù)都向前移動(dòng)復(fù)制一位。最后把原來(lái)數(shù)組末尾指針指向null;





remove(object)



這個(gè)方法首先會(huì)從elementData數(shù)組里邊從頭到尾遍歷尋找該對(duì)象,然后會(huì)調(diào)用fastRemove方法進(jìn)行刪除,fastRemove方法和remove方法大同小異時(shí)間復(fù)雜度仍然是O(n)。


get是對(duì)數(shù)組的隨即訪(fǎng)問(wèn),肯定時(shí)間復(fù)雜度為O(1)



index是對(duì)對(duì)象的順序查找,時(shí)間復(fù)雜度為O(n)



set是對(duì)數(shù)組的隨機(jī)修改,直接操作數(shù)組,時(shí)間復(fù)雜度為O(1)

最后編輯于
?著作權(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)容