1. 程式人生 > 實用技巧 >ArrayList與LinkedList的效能比較

ArrayList與LinkedList的效能比較

前言

我們都知道ArrayList適合查詢/替換LinkedList適合新增/刪除,造成這樣子的原因也在於它們底層的實現。光說這些理論似乎大家都會,所以準備用更加具體的例子來證明它,也能更好地比較這兩者之間的效能關係。在測試具體場景前,簡單說明下環境配置,window環境下:記憶體8個G;JDK8;i7處理器。

測試場景

分別準備1w、5w、10w、50w、100w條資料,也就是說資料類別有上面這幾種,將它們分別按照下列場景測試。

  • 在首部、尾部新增元素/節點的效率。

  • 隨機位置/索引插入元素/節點的效率。

  • 在首部、尾部刪除元素/節點的效率。

  • 隨機位置/索引刪除元素/節點的效率。

  • 隨機位置/索引獲取元素/節點的效率。

  • 隨機位置/索引修改元素/節點的效率。

測試結果

測試結果將以表格的方式展示。

  • 在首部、尾部新增元素/節點。

A首:ArrayList首部新增元素,L首:LinkedList首部新增元素,A尾:ArrayList尾部新增元素,L尾:LinkedList尾部新增元素。

  • 隨機位置/索引插入元素/節點。

A隨:ArrayList隨機位置新增元素,L隨:LinkedList隨機位置新增元素。

由於50w、100w執行時間過長故並未給出具體時間,不過已經足以說明結果了。

  • 在首部、尾部刪除元素/節點。

A首:ArrayList首部刪除元素,L首:LinkedList首部刪除元素,A尾:ArrayList尾部刪除元素,L尾:LinkedList尾部刪除元素。

  • 隨機位置/索引刪除元素/節點。

同上。

  • 隨機位置/索引獲取元素/節點。

同上。

  • 隨機位置/索引替換元素/節點。

同上。

測試結果分析

以上的測試方式較為簡單,沒有考慮其他太多的因素,所以不要糾結於具體的時間,而是要了解它們的效能趨勢。從測試結果來看,可以得到更為具體的結論:

  • 在首部新增/刪除元素/節點過程中,隨著資料量的不斷增大,LinkedList明顯要比ArrayList優秀很多而對於尾部新增/刪除兩者則差別不大

  • 在隨機插入/刪除/獲取/替換元素/節點過程中,隨著資料量的不斷增大,ArrayList明顯要比LinkedList優秀很多!

結論

  • ArrayList比LinkedList更能適應大多數情況

  • 頻繁在首部新增/刪除元素/節點,不需要過多的訪問,可能更適合LinkedList。