ArrayList和LinkedList都實(shí)現(xiàn)了List接口舶衬,用于存儲(chǔ)一系列的對(duì)象引用弛饭。它們都可以對(duì)元素的增刪改查進(jìn)行操作舌劳。但是它們之間也存在一些區(qū)別牲证,這些區(qū)別使得它們?cè)诓煌瑪?shù)據(jù)操作上的性能也大不一樣研叫。
ArrayList
ArrayList在集合的末尾刪除或添加元素所用的時(shí)間是一致的锤窑,但是在列表中間的部分添加或刪除時(shí)所用時(shí)間就會(huì)大大增加,但是它在根據(jù)索引查找元素的時(shí)候速度很快嚷炉。
LinkedList
LinkedList在插入渊啰、刪除集合中任何位置的元素所花費(fèi)的時(shí)間都是一樣的,但是它根據(jù)索引查詢一個(gè)元素的時(shí)候卻比較慢申屹。
主要區(qū)別
1.ArrayList是基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)绘证,LinkedList是基于鏈表的數(shù)據(jù)結(jié)構(gòu)。
2.對(duì)于隨機(jī)訪問的get和set方法哗讥,ArrayList要優(yōu)于LinkedList嚷那,因?yàn)長(zhǎng)inkedList要移動(dòng)指針。
3.對(duì)于新增和刪除操作add和remove杆煞,LinkedList比較占優(yōu)勢(shì)魏宽,因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)。
兩者的缺點(diǎn)
1.ArrayList和LinkedList在列表末尾增加一個(gè)元素所花的開銷都是固定的决乎。對(duì) ArrayList而言队询,主要是在內(nèi)部數(shù)組中增加一項(xiàng),指向所添加的元素构诚,偶爾可能會(huì)導(dǎo)致對(duì)數(shù)組重新進(jìn)行分配蚌斩;而對(duì)LinkedList而言,這個(gè)開銷是統(tǒng)一的范嘱,分配一個(gè)內(nèi)部Entry對(duì)象送膳。
2.在ArrayList集合中添加或者刪除一個(gè)元素時(shí),當(dāng)前的列表所所有的元素都會(huì)被移動(dòng)丑蛤。而LinkedList集合中添加或者刪除一個(gè)元素的開銷是固定的叠聋。
3.LinkedList集合不支持高效的隨機(jī)訪問,因?yàn)榭赡墚a(chǎn)生二次項(xiàng)的行為受裹。
4.ArrayList的空間浪費(fèi)主要體現(xiàn)在在list列表的結(jié)尾預(yù)留一定的容量空間晒奕,而LinkedList的空間花費(fèi)則體現(xiàn)在它的每一個(gè)元素都需要消耗相當(dāng)?shù)目臻g。
總結(jié)
1.進(jìn)行查詢操作時(shí)推薦使用ArrayList名斟。
2.進(jìn)行增刪操作的時(shí)候推薦使用LinkedList脑慧。