LinkedList與ArrayList的區別

LinkedList與ArrayList的區別:

1 、 因爲Array是基於索引(index)的數據結構,它使用索引在數組中搜索和讀取數據是很快的,可以直接返回數組中index位置的元素,因此在隨機訪問集合元素上有較好的性能。Array獲取數據的時間複雜度是O(1),但是要插入、刪除數據卻是開銷很大的,因爲這需要移動數組中插入位置之後的的所有元素。ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。 (LinkedList是雙向鏈表,有next也有previous)
2 、相對於ArrayList,LinkedList的隨機訪問集合元素時性能較差,因爲需要在雙向列表中找到要index的位置,再返回;但在插入,刪除操作是更快的。因爲LinkedList不像ArrayList一樣,不需要改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入一個新的數組,這是ArrayList最壞的一種情況,時間複雜度是O(n),而LinkedList中插入或刪除的時間複雜度僅爲O(1)。ArrayList在插入數據時還需要更新索引(除了插入數組的尾部)。
3 、LinkedList需要更多的內存,因爲ArrayList的每個索引的位置是實際的數據,而LinkedList中的每個節點中存儲的是實際的數據和前後節點的位置。
4 、對於隨機訪問get和set,ArrayList覺得優於LinkedList,因爲LinkedList要移動指針。
5 、對於新增和刪除操作add和remove,LinedList比較佔優勢,因爲ArrayList要移動數據。

使用場景

(1)如果應用程序對數據有較多的隨機訪問,ArrayList對象要優於LinkedList對象;

(2) 如果應用程序有更多的插入或者刪除操作,較少的數據讀取,LinkedList對象要優於ArrayList對象;

(3)不過ArrayList的插入,刪除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那麼ArrayList只需要移動較少的數據,而LinkedList則需要一直查找到列表尾部,反而耗費較多時間,這時ArrayList就比LinkedList要快。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章