ArrayList,LinkedList都是Collection接口的通用實(shí)現(xiàn)方式,兩者采用了不用的存儲(chǔ)策略,用來(lái)適應(yīng)不同場(chǎng)合的需要。
10余年專注成都網(wǎng)站制作,成都定制網(wǎng)頁(yè)設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁(yè)設(shè)計(jì),高端網(wǎng)頁(yè)制作,對(duì)成都紙箱等多個(gè)領(lǐng)域,擁有多年的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)。實(shí)現(xiàn)方式
ArrayList的內(nèi)部采用集合的方式存儲(chǔ)數(shù)據(jù)
唯一需要注意的是對(duì)于容量超過(guò)閾值的處理邏輯,數(shù)組的默認(rèn)容量大小是10,大容量是Integer.Max_Value,超過(guò)大容量會(huì)拋內(nèi)存溢出異常,
擴(kuò)容機(jī)制看下面
擴(kuò)容后的容量是原有容量的1.5倍
LinkedList的實(shí)現(xiàn)方式
內(nèi)部采用雙向鏈表Node內(nèi)部類來(lái)存儲(chǔ)數(shù)據(jù),由于采用了雙向鏈表,LinkedList也可以當(dāng)做棧和隊(duì)列來(lái)使用,但是效率比較低,Java提供了ArrayDeqeue的高效率實(shí)現(xiàn)。
性能比較
在尾部插入效率上面,兩者相差不會(huì)太大,但是LinkedList需要維護(hù)雙向鏈表的關(guān)系,所有存儲(chǔ)效率上面會(huì)略遜于ArrayList
ArrayList的時(shí)間主要耗時(shí)在容量擴(kuò)容,數(shù)據(jù)遷移上面,如果我們一次性初始化容量,應(yīng)該還可以有提升的空間,再來(lái)對(duì)比看看,有恐怖的50%的提升空間
Linked的優(yōu)勢(shì)在于頭部插入的效率,只需要修改頭部元素的指針就可以做到,而數(shù)組還需要移動(dòng)后續(xù)的數(shù)據(jù),所有效率遠(yuǎn)遠(yuǎn)低于LinkedList
對(duì)于get,set的操作,鏈表內(nèi)部通過(guò)二分查找,數(shù)組可以通過(guò)下標(biāo)直接訪問(wèn)元素,所以效率高于LinkedList
基于以上比較,我們基本上可以確定
如果只是存放數(shù)據(jù),并進(jìn)行j簡(jiǎn)單的迭代情況下,我們一般采用集合的效率最高,
如果涉及到頻繁的修改元素,就應(yīng)該采用LinkedList
希望本篇文章對(duì)您有所幫助