ArrayList和LinkedList都實現了List接口,可是他們的實現原理卻不同,其數據結構也不相同。數組
ArrayList是一個大小可變的數組,當有更多的元素添加進ArrayList中時,其大小會動態的增加。數據結構
LinkedList是一個雙向鏈表,鏈表中的每個元素還保存有其前、後元素的索引。spa
對比
- 由於ArrayList是基於索引的數組,每個索引的位置是實際的數據,因此其基於索引在數組中搜索和讀取數據要快於LinkedList。
- LinkedList在插入或刪除數據時,不須要改變數組大小,也不須要在數組被裝滿時將全部數據從新載入一個新的數組。而ArrayList除了須要改變數組的同時還須要更新索引,因此LinkedList在插入或者刪除要快於ArrayList。
- LinkedList須要更多的內存,由於ArrayList的每一個節點的位置是實際的數據,而LinkedList中每一個節點的數據除了數據自己還有先後節點的索引。
適用場景
不少場景下ArrayList更受歡迎:你須要一個不使用同步而基於索引的數據訪問時儘可能使用ArrayList,ArrayList很容易使用,可是儘可能指定其大小,並減小數組的改變。索引
而如下場景使用LinkedList更合適:接口
- 你的應用不須要隨機訪問數據,而是從第一個元素依次進行處理時(如隊列)。
- 你的應用須要更多的使用插入和更新,而不多去讀取數據時。