ArrayList 和 LinkedList實(shí)踐與分析

對(duì)于ArrayList & LinkedList插入效率的問(wèn)題,以前的理解是 ArrayList需要將插入點(diǎn)后邊的全部數(shù)組位置改變,而LinkedList是由鏈表實(shí)現(xiàn),因此隨機(jī)位置插入只需要斷開(kāi)node前后的指向,所以LinkedList的效率應(yīng)該是快的,可實(shí)踐的情況卻略有偏差。

上圖 代碼如下:

四種情況的運(yùn)行結(jié)果如下:

前段插入

ArrayList :342ms

LinkedList:20ms

尾部插入

ArrayList :27ms

LinkedList:43ms

中間插入

ArrayList :200ms

LinkedList:8784ms

隨機(jī)插入

ArrayList :229ms

LinkedList:6687ms

從現(xiàn)象上看,ArrayList自己的操作而言前段比尾段慢,應(yīng)該是由于每次copy數(shù)組的長(zhǎng)度不同導(dǎo)致的開(kāi)銷(xiāo),可以理解??墒荓inkedList在兩端的操作很快,中間非常非常慢,又是為何?

從源碼中獲的了一些猜想


LinkedList首先要找到位置為index的那個(gè)node然后把要插入的element放在它的前邊,在尋找node的過(guò)程先判斷index是在前半段還是后半段,在前半段的話從first往后找,在后半段的話從last往前找。那么如果index在中間位置的話,查找速度必然最慢。那么再回頭看看數(shù)據(jù)里的兩端快,中部慢現(xiàn)象。所以查找node節(jié)點(diǎn)的過(guò)程應(yīng)該造成了更多的開(kāi)銷(xiāo)。

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