數(shù)據(jù)結(jié)構(gòu)
對(duì)于數(shù)據(jù)結(jié)構(gòu)我這邊只告訴你右邊框框里的
棧的特點(diǎn):后進(jìn)先出,先進(jìn)后出,入棧也成為壓棧,出棧也成為彈棧
棧就像一個(gè)彈夾
隊(duì)列先進(jìn)先出后進(jìn)后出
隊(duì)列像排隊(duì)
鏈表查詢滿 但是增刪快(相對(duì)于數(shù)組而言)
拓展:還有一個(gè)雙向鏈表 他在查詢?cè)氐臅r(shí)候更快些,因?yàn)樗谀玫揭粋€(gè)元素后先判斷離頭結(jié)點(diǎn)近一點(diǎn)還是尾結(jié)點(diǎn)
總結(jié)
ArrayList源碼底層
ArrayList用空參構(gòu)造創(chuàng)建對(duì)象.在底層創(chuàng)建一個(gè)默認(rèn)長(zhǎng)度為0的數(shù)組elementData(數(shù)組名) 然后有一個(gè)size指向元素
添加第一個(gè)元素
的時(shí)候,底層才會(huì)創(chuàng)建一個(gè)新的長(zhǎng)度為10的1數(shù)組`
數(shù)組存滿的時(shí)候回添加一個(gè)新數(shù)組 新數(shù)組是老數(shù)組長(zhǎng)度的1.5倍 并且會(huì)把老數(shù)組的內(nèi)容拷貝過去
size有兩個(gè)含義:一個(gè)是集合長(zhǎng)度 一個(gè)當(dāng)他完成存儲(chǔ)他會(huì)指向下次存入的位置
如果一次添加多個(gè)元素,1.5倍放不下,則新創(chuàng)建數(shù)組的長(zhǎng)度以實(shí)際為準(zhǔn)
上圖為添加一個(gè)元素的經(jīng)過的流程
上圖為長(zhǎng)度為10的數(shù)組裝滿如何擴(kuò)容
minGrowth是至少要增加的容量
prefGrowth是默認(rèn)新增容量的大小.就是老容量的1.5倍
LinkedList
獨(dú)有api,了解即可,因?yàn)檫@些方法,Collectoin都可以實(shí)現(xiàn)
底層源碼
LinkedList底層是一個(gè)雙向鏈表所以他有
空參構(gòu)造的成員位置有size和first last 頭結(jié)點(diǎn)為節(jié)點(diǎn).當(dāng)?shù)粲每諈?gòu)造就會(huì)自動(dòng)生成這些
node有三個(gè)成員變量
item現(xiàn)在要存儲(chǔ)的數(shù)據(jù)
next 下一個(gè)結(jié)點(diǎn)要記錄的地址值
prev我要記錄前一個(gè)結(jié)點(diǎn)的地址值
空參構(gòu)造創(chuàng)建完對(duì)象就是上圖的樣子
添加了一個(gè)結(jié)點(diǎn)
添加第二個(gè)元素的操作
添加第三個(gè).元素添加完畢
迭代器底層
獲取迭代器對(duì)象后相當(dāng)于創(chuàng)建自己內(nèi)部類對(duì)象(Itr)
內(nèi)部類有三個(gè)成員變量
cursor指針默認(rèn)初始化0
lasRet剛剛操作索引的位置
hasNext判斷原理
指針跟size比較直到指針為3文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-745172.html
上面源碼就是為什么使用集合的方法太你家刪除元素會(huì)報(bào)錯(cuò)的原因.因?yàn)閙odCount在使用add或者remove會(huì)自增 最后他會(huì)拿著一開始modCount的值跟最新變化次數(shù)作比較 如果不一樣就會(huì)報(bào)錯(cuò)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-745172.html
到了這里,關(guān)于java 數(shù)據(jù)結(jié)構(gòu) ArrayList源碼底層 LinkedList 底層源碼 迭代器底層的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!