數(shù)組
用連續(xù)的內(nèi)存解藻,存儲(chǔ)同一類型的數(shù)據(jù);特點(diǎn)隨機(jī)訪問葡盗,訪問速度塊(可以根據(jù)公式計(jì)算位置)螟左,同時(shí)刪除,插入的速度比較慢 復(fù)雜度為o(1) ,在平常的開發(fā)中使用程序語音提供的容器就行(比如 Java 的arrrylist )觅够,底層開發(fā)的話就是直接使用數(shù)組比較好的胶背; 為線性數(shù)據(jù)結(jié)構(gòu)
鏈表
所需要的內(nèi)存不是一整塊的,是通過指針將零碎內(nèi)存拼接的喘先,鏈表的每個(gè)節(jié)點(diǎn)除了要存儲(chǔ)數(shù)據(jù)還要存儲(chǔ)下個(gè)節(jié)點(diǎn)的位置钳吟;所以所需要內(nèi)存也是比較大的; 因?yàn)殒湵淼拇鎯?chǔ)空間不是連續(xù)的窘拯,所以也不需要移動(dòng)红且,所以刪除比較塊,同時(shí)不是連續(xù)的無法計(jì)算其位置涤姊,需要遍歷所以查詢是慢的暇番;
單鏈表
-
循環(huán)列表
- 處理環(huán)形狀數(shù)據(jù)的時(shí)候適用:約瑟夫問題
-
雙向鏈表
- linkhashmap
- 刪除制定值的節(jié)點(diǎn)中,和單列表沒什么區(qū)別思喊,當(dāng)刪除指定指針?biāo)赶虻墓?jié)點(diǎn)時(shí)比單列表快一些,雙向的節(jié)點(diǎn)信息保存到前一個(gè)節(jié)點(diǎn)的指指針內(nèi)壁酬,所以也是可以用公式,推算出來的恨课;
<mark style="box-sizing: border-box;">數(shù)組和鏈表的最大區(qū)別還是擴(kuò)容問題舆乔,同時(shí)數(shù)組和鏈表都是有順序的</mark>
棧
棧,先進(jìn)后出的情況庄呈,在日常應(yīng)用中有很多的的用處蜕煌,雙棧的設(shè)計(jì)可以解決很多應(yīng)用問題,可以擴(kuò)容诬留,其出入復(fù)雜度為O(n),基本棧的出入棧的復(fù)雜度為O(1)斜纪,是用數(shù)組和鏈表實(shí)現(xiàn)的
隊(duì)列
隊(duì)列的先進(jìn)先出,也是可以用數(shù)據(jù)和鏈表來實(shí)現(xiàn)文兑;
-
循環(huán)對(duì)列:
- 循環(huán)隊(duì)列的好處盒刚,不用移動(dòng)數(shù)據(jù),提升了效率
阻塞隊(duì)列:阻止隊(duì)列的出和入
并發(fā)隊(duì)列:解決線程安全的隊(duì)列绿贞,循環(huán)隊(duì)列加力度鎖可以更好的實(shí)現(xiàn)并發(fā)隊(duì)列因块;