兩者皆實作 List 介面,但底層資料結構截然不同,導致適用場景大相逕庭。本文結合源碼分析與基準測試數據,給出明確選型建議。
Object[] elementDataInteger.MAX_VALUEoldCapacity + (oldCapacity >> 1))

Node<E> 內部類,含 prev、next、itemDeque 介面,可作堆疊/佇列 (但效能不如 ArrayDeque)
兩者差異不大,ArrayList 略勝 (無節點物件分配、無指標維護)。

ArrayList 一次性指定容量可避免擴容複製,**效能提升 ~50%**。

LinkedList 完勝:只需修改頭節點指標。ArrayList 需整體右移,O(n)。

ArrayList O(1) 碾壓 LinkedList O(n/2) (雙向遍歷優化)。

| 場景 | 推薦 | 理由 |
|---|---|---|
| 頻繁隨機存取、遍歷 | ArrayList | O(1) 索引存取、記憶體連續、CPU 快取友善 |
| 頻繁頭部/中間插入刪除 | LinkedList | O(1) 節點操作、無陣列搬移 |
| 佇列/堆疊 | ArrayDeque | 雙端陣列實現、效能優於 LinkedList |
| 多執行緒讀多寫少 | CopyOnWriteArrayList | 無鎖讀取、寫入複製新陣列 |
| 資料量可預估 | ArrayList + 指定初始容量 | 避免擴容開銷 |
90% 以上場景首選 ArrayList。只有確定「高頻頭部/中間插刪且資料量大」時才考慮 LinkedList。現代 JVM 對陣列複製高度優化,鏈表的指標追蹤反而不利於 CPU 預取與快取。