ArrayList和LinkedList都實現了List接口,ArrayList的實現用的是數組,LinkedList是基於鏈表,ArrayList適合查找,LinkedList適合增刪。
ArrayList與LinkList兩者的區別:
ArrayList是基於索引的數據接口,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。
相對於ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。
LinkedList比ArrayList更占內存,因為LinkedList為每壹個節點存儲了兩個引用,壹個指向前壹個元素,壹個指向下壹個元素。
但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。
2) 相對於 ArrayList , LinkedList 插入是更快的。因為 LinkedList 不像 ArrayList 壹樣,不需要改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入壹個新的數組,這是 ArrayList 最壞的壹種情況,時間復雜度是 O(n) ,而 LinkedList 中插入或刪除的時間復雜度僅為 O(1) 。 ArrayList 在插入數據時還需要更新索引(除了插入數組的尾部)。
3) 類似於插入數據,刪除數據時, LinkedList 也優於 ArrayList 。
4) LinkedList 需要更多的內存,因為 ArrayList 的每個索引的位置是實際的數據,而 LinkedList 中的每個節點中存儲的是實際的數據和前後節點的位置 ( 壹個 LinkedList 實例存儲了兩個值: Node first 和 Node last 分別表示鏈表的其實節點和尾節點,每個 Node 實例存儲了三個值: E item,Node next,Node pre) 。
什麽場景下更適宜使用 LinkedList,而不用ArrayList
1) 妳的應用不會隨機訪問數據 。因為如果妳需要LinkedList中的第n個元素的時候,妳需要從第壹個元素順序數到第n個數據,然後讀取數據。
2) 妳的應用更多的插入和刪除元素,更少的讀取數據 。因為插入和刪除元素不涉及重排數據,所以它要比ArrayList要快。