ArrayList和LinkedList都是經(jīng)常使用的集合工具,但真正原理卻千差萬別。
本質(zhì)區(qū)別就是: ArrayList是數(shù)組結(jié)構(gòu),LinkedList是鏈表結(jié)構(gòu)。
基于本質(zhì)的區(qū)別,可以總結(jié)ArrayList和LinkedList的特點和不同點了。
1、增加元素到列表末尾時,當元素個數(shù)超過數(shù)組限制,ArrayList要進行數(shù)組擴容,這對性能有一定影響。而本質(zhì)是鏈表的LinkedList則不需要進行擴容。
2、增加元素到任意位置時,本質(zhì)是數(shù)組的ArrayList需要移動后面的元素重新排列,開銷也會隨著添加元素位置越靠前而越大,而本質(zhì)是鏈表的LinkedList則只要改變前后的指向就行,性能開銷遠遠小于ArrayList.
3、刪除任意元素同上。
4、遍歷性能對比:
構(gòu)造一個擁有100萬數(shù)據(jù)的ArrayList和等價的LinkedList,使用以上代碼進行測試,測試結(jié)果的相對耗時如下表所示:

image.png
LinkedList因為是鏈表實現(xiàn),所以在迭代遍歷中占有很明顯的優(yōu)勢,而在通過數(shù)組下標的遍歷中,鏈表需要通過指針計算出下標來遍歷,所以性能非常慢,而ArrayList因為是數(shù)組實現(xiàn),通過數(shù)組下標遍歷速度最快。