數(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è)查找,不能直接定位。