重新回顧了下里初,總結(jié)如下:
1.數(shù)組
查詢快:數(shù)組要求是一塊連續(xù)的內(nèi)存空間來(lái)存儲(chǔ)啃勉,這就要求在物理上這一片空間是連續(xù)的,每個(gè)元素都有指定的索引index指向內(nèi)存地址青瀑,因此查詢對(duì)時(shí)候璧亮,可根據(jù)index快速找到對(duì)應(yīng)地址存儲(chǔ)的信息萧诫,此為查詢快.
增刪慢:但要進(jìn)行增刪的時(shí)候,就必須將目標(biāo)位置后的所有元素都整體移動(dòng)枝嘶,因此就比較耗時(shí)帘饶,此為增刪慢.
2.鏈表
增刪快:鏈表在物理上是動(dòng)態(tài)地分配儲(chǔ)存空間,不要求連續(xù)性群扶,但是要求邏輯上的連續(xù)及刻。它需要存儲(chǔ)每個(gè)元素在內(nèi)存中的地址,以及它相鄰元素的地址竞阐,然后像鏈條一樣把各元素鏈起來(lái)缴饭,保證了在邏輯上的連續(xù)性。
比如:
單鏈表骆莹,每個(gè)元素除了存儲(chǔ)本身的值外颗搂,還存儲(chǔ)了前驅(qū)的引用,也就是存儲(chǔ)了前驅(qū)所在的內(nèi)存地址信息幕垦。
雙鏈表就是不僅存儲(chǔ)了前驅(qū)的引用還存儲(chǔ)了后繼的引用.
增加元素的時(shí)候丢氢,只需給增加元素添加其前元素或后元素的地址;刪除元素的時(shí)候先改,修改目標(biāo)元素前驅(qū)和后驅(qū)的首位連接地址. 故此為增刪快疚察。
查詢慢:由于沒(méi)有像數(shù)組那樣的索引,因此仇奶,查詢的時(shí)候需要遍歷整個(gè)鏈表所有元素的內(nèi)存地址貌嫡,然后才能確定目標(biāo)元素,此為查詢慢该溯。
內(nèi)存中的存儲(chǔ)形式可以分為連續(xù)存儲(chǔ)和離散存儲(chǔ)兩種岛抄。因此,數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu)就有連續(xù)存儲(chǔ)和離散存儲(chǔ)兩種朗伶,它們對(duì)應(yīng)了我們通常所說(shuō)的數(shù)組和鏈表弦撩。
*因?yàn)閿?shù)組是連續(xù)存儲(chǔ)的步咪,在操作數(shù)組中的數(shù)據(jù)時(shí)就可以根據(jù)離首地址的偏移量直接存取相應(yīng)位置上的數(shù)據(jù)论皆,但是如果要在數(shù)據(jù)組中任意位置上插入一個(gè)元素,就需要先把后面的元素集體向后移一位為其空出存儲(chǔ)空間猾漫。
與之相反点晴,鏈表是離散存儲(chǔ)的,所以在插入一個(gè)數(shù)據(jù)時(shí)只要申請(qǐng)一片新空間悯周,然后將其中的連接關(guān)系做一個(gè)修改就可以粒督,但是顯然在鏈表上查找一個(gè)數(shù)據(jù)時(shí)就要逐個(gè)遍歷了。
考慮以上的總結(jié)可見(jiàn)禽翼,數(shù)組和鏈表各有優(yōu)缺點(diǎn)屠橄。在具體使用時(shí)要根據(jù)具體情況選擇族跛。當(dāng)查找數(shù)據(jù)操作比較多時(shí)最好用數(shù)組;當(dāng)對(duì)數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行添加或刪除比較多時(shí)最好選擇鏈表锐墙。`
[Java]淺談HashMap和ConcurrentHashMap的區(qū)別https://blog.csdn.net/singc/article/details/108617334