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。