arraydeque和linkedlist的優(yōu)缺點?
ArrayList,與LinkedList都是屬于實現(xiàn)了List接口的類。首先從名字前綴開始看 ,Array表示數(shù)組,Link表示鏈表。
所以ArrayList底層是基于動態(tài)數(shù)組的。而LinkedList底層是基于雙向鏈表的。
ArrayList必須是連續(xù)內(nèi)存的,而LinkedList不要求連續(xù)內(nèi)存。
ArrayList查詢快,增加和刪除慢;LinkedList增加和刪除快,查詢慢。
ArrayList 底層為動態(tài)數(shù)組,所以查詢時是直接通過訪問下標(biāo),查詢效率高。而增加而刪除時,為了保證內(nèi)存的連續(xù),增加和刪除某一位置后,后方元素都得向前移動一位,
最壞情況就是刪除第一個元素,則后面第2個到第n個元素都得往前移動一位。所以增加刪除慢。
LinkedList底層為雙向鏈表,不必保證內(nèi)存上的連續(xù),所以增刪快,而查詢時必須要經(jīng)歷從頭到尾的遍歷,所以查詢慢。
為什么說ArrayList是基于動態(tài)數(shù)組呢?一般的數(shù)組,容量確定了就不可以再更改,也無法超過。但是ArrayList可以,
例如當(dāng)數(shù)組元素數(shù)已滿時調(diào)用了add方法向尾部添加一個元素,則此時會進(jìn)行擴(kuò)容,ArrayList會自動創(chuàng)建一個更大的數(shù)組,并將所有元素拷貝到新數(shù)組中,而原數(shù)組會被拋棄,
會被GC回收。擴(kuò)容后新數(shù)組的容量為原來的1.5倍。