①. ArrayList和LinkedList可想從名字分析,它們一個是Array(動態(tài)數(shù)組)的數(shù)據(jù)結(jié)構(gòu),一個是Link(鏈表)的數(shù)據(jù)結(jié)構(gòu),此外,它們兩個都是對List接口的實(shí)現(xiàn)。 前者是數(shù)組隊列,相當(dāng)于動態(tài)數(shù)組;后者為雙向鏈表結(jié)構(gòu),也可當(dāng)作堆棧、隊列、雙端隊列。
?、? 當(dāng)隨機(jī)訪問List時(get和set操作),ArrayList比LinkedList的效率更高,因?yàn)長inkedList是線性的數(shù)據(jù)存儲方式,所以需要移動指針從前往后依次查找。
?、? 當(dāng)對數(shù)據(jù)進(jìn)行增加和刪除的操作時(add和remove操作),LinkedList比ArrayList的效率更高,因?yàn)锳rrayList是數(shù)組,所以在其中進(jìn)行增刪操作時,會對操作點(diǎn)之后所有數(shù)據(jù)的下標(biāo)索引造成影響,需要進(jìn)行數(shù)據(jù)的移動。
?、? 從利用效率來看,ArrayList自由性較低,因?yàn)樗枰謩拥脑O(shè)置固定大小的容量,但是它的使用比較方便,只需要創(chuàng)建,然后添加數(shù)據(jù),通過調(diào)用下標(biāo)進(jìn)行使用;而LinkedList自由性較高,能夠動態(tài)的隨數(shù)據(jù)量的變化而變化,但是它不便于使用。
⑤. ArrayList主要控件開銷在于需要在lList列表預(yù)留一定空間;而LinkList主要控件開銷在于需要存儲結(jié)點(diǎn)信息以及結(jié)點(diǎn)指針信息。 場景: 鏈表,插入刪除快,查找修改慢。 適用于頻繁增刪的場景。 數(shù)組,查找快,插入刪除慢。 適用于頻繁查找和修改的場景。