ArrayList和LinkedList的區(qū)別
1. 數(shù)據(jù)結(jié)構(gòu)不同
ArrayList是基于動態(tài)數(shù)組實(shí)現(xiàn)的画拾。
LinkedList是基于雙向鏈表實(shí)現(xiàn)的焕蹄。
2. 效率不同
隨機(jī)訪問
隨機(jī)訪問(get或set)毡琉,ArrayList比LinkedList效率高乡话。因?yàn)長inkedList要移動指針進(jìn)行查找荞估。
LinkedList在查找過程中會先確定當(dāng)前要訪問的index處于前半部分還是后半部分貌笨,然后在從頭或尾開始查找弱判。
添加元素
添加元素又分為是隨機(jī)位置添加還是只向尾部添加。
如果是只向尾部添加躁绸,在給定合適大小的數(shù)組中裕循,不發(fā)生擴(kuò)容的情況下ArrayList的性能要好一些。
在集合頭部添加净刮,LinkedList的性能更好剥哑,因?yàn)锳rrayList需要進(jìn)行數(shù)組的復(fù)制和重排。
刪除元素
刪除元素LinkedList主要影響性能的點(diǎn)是在找要刪除的元素淹父,ArrayList主要影響性能的點(diǎn)是在刪除后數(shù)組的移動重組株婴。
遍歷
Arraylist實(shí)現(xiàn)了RandomAccess接口,遍歷速度快暑认。
LinkedList通過for循環(huán)遍歷慢困介,可以通過迭代器遍歷。
3. 實(shí)現(xiàn)接口
LinkedList實(shí)現(xiàn)了Deque接口蘸际,可以做為雙端隊(duì)列或棧使用座哩。