JAVA之?dāng)?shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組和鏈表

數(shù)組數(shù)據(jù)結(jié)構(gòu)

特點(diǎn):

查詢和修改快

增加和刪除慢

ArrayList的底層是使用數(shù)組的數(shù)據(jù)結(jié)構(gòu)

在ArrayList中初始化的長(zhǎng)度是10,如果長(zhǎng)度不夠用了,每次會(huì)增加之前長(zhǎng)度的50%,然后將舊的集合中的數(shù)據(jù)拷貝到新的集合中。

數(shù)組結(jié)構(gòu)圖:

為什么查詢和修改快?

查詢和修改時(shí)直接通過(guò)數(shù)組的下標(biāo)就能快速定位到相應(yīng)的位置。

為什么增加和刪除慢?

數(shù)組里面內(nèi)存地址是連續(xù)的,如果要做增加或者刪除時(shí)勢(shì)必要修改長(zhǎng)度,這樣可能會(huì)導(dǎo)致牽一發(fā)而動(dòng)全身的操作,比如在下標(biāo)是2位置上的元素進(jìn)行刪除,那么后面每個(gè)位置上面的元素都會(huì)向前移動(dòng)。

鏈表數(shù)據(jù)結(jié)構(gòu)

特點(diǎn):

增加和刪除快

查詢和修改慢

LinkedList的底層使用的是鏈表數(shù)據(jù)結(jié)構(gòu),可以將鏈表看做是一條斷開的車鏈子,兩兩相扣。

鏈表結(jié)構(gòu)圖

為什么增加和刪除快?

鏈表里面的內(nèi)存地址不是連續(xù)的,每個(gè)元素里面都保留著上一個(gè)元素和下一個(gè)元素的內(nèi)存地址(首尾除外),如果要增加或刪除元素時(shí),只有與他相鄰的兩個(gè)位置上的元素發(fā)生變化,其他元素不用任何改變。

為什么查詢和修改慢?

鏈表里面的內(nèi)存地址不是連續(xù)的,要查找的話,需要從頭或者尾部挨個(gè)查找,不能直接定位。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容