ArrayList 與LinkedList 的區別及分別的優缺點


ArrayList,與LinkedList都是屬於實現了List接口的類。首先從名字前綴開始看  ,Array表示數組,Link表示鏈表。

所以ArrayList底層是基於動態數組的。而LinkedList底層是基於雙向鏈表的。

ArrayList必須是連續內存的,而LinkedList不要求連續內存。

ArrayList查詢快,增加和刪除慢;LinkedList增加和刪除快,查詢慢。

ArrayList 底層為動態數組,所以查詢時是直接通過訪問下標,查詢效率高。而增加而刪除時,為了保證內存的連續,增加和刪除某一位置后,后方元素都得向前移動一位,

最壞情況就是刪除第一個元素,則后面第2個到第n個元素都得往前移動一位。所以增加刪除慢。

LinkedList底層為雙向鏈表,不必保證內存上的連續,所以增刪快,而查詢時必須要經歷從頭到尾的遍歷,所以查詢慢。

為什么說ArrayList是基於動態數組呢?一般的數組,容量確定了就不可以再更改,也無法超過。但是ArrayList可以,

例如當數組元素數已滿時調用了add方法向尾部添加一個元素,則此時會進行擴容,ArrayList會自動創建一個更大的數組,並將所有元素拷貝到新數組中,而原數組會被拋棄,

會被GC回收。擴容后新數組的容量為原來的1.5倍。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM