站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        詳細(xì)介紹php中的Data Structures擴(kuò)展

        PHP中因?yàn)閿?shù)組太過強(qiáng)大,把這些數(shù)據(jù)結(jié)構(gòu)都囊括進(jìn)來了,所以不太需要去關(guān)注這些數(shù)據(jù)結(jié)構(gòu),久而久之這些概念也就淡化了。在PHP中有個(gè)擴(kuò)展叫Data Structures,這個(gè)擴(kuò)展包含了這些常見的數(shù)據(jù)結(jié)構(gòu)。今天就來介紹一下。

        詳細(xì)介紹php中的Data Structures擴(kuò)展

        在 PHP 中因?yàn)閿?shù)組太過強(qiáng)大,把這些數(shù)據(jù)結(jié)構(gòu)都囊括進(jìn)來了,所以不太需要去關(guān)注這些數(shù)據(jù)結(jié)構(gòu),久而久之這些概念也就淡化了,不是說 PHP 中沒有數(shù)據(jù)結(jié)構(gòu)。

        在 PHP 中有個(gè)擴(kuò)展 Data Structures,這個(gè)擴(kuò)展包含了這些常見的 數(shù)據(jù)結(jié)構(gòu)。

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

        • 優(yōu)先級(jí)隊(duì)列 PriorityQueue

        • 雙端隊(duì)列 Deque

        • 隊(duì)列 FIFO(先進(jìn)先出)

        • 棧 LIFO(先進(jìn)后出)

        • 散列表 Hash

        • Set 集合
        • Map 字典

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

        優(yōu)先級(jí)隊(duì)列 PriorityQueue

        PriorityQueue 與 Queue 非常相似。 值被推入具有指定優(yōu)先級(jí)的隊(duì)列中,具有最高優(yōu)先級(jí)的值將始終位于隊(duì)列的前面。

        注意

        • 對(duì)于具有相同優(yōu)先級(jí)的值,保留“先進(jìn)先出”順序。

        • 迭代 PriorityQueue 是破壞性的,相當(dāng)于連續(xù)彈出操作,直到隊(duì)列為空。

        設(shè)置容量

        默認(rèn)容量是 8,可以手動(dòng)設(shè)置容量,這個(gè)容量不是指隊(duì)列的長(zhǎng)度,而是說存儲(chǔ)空間。再分配容量時(shí)確保有足夠的內(nèi)存

        如果該值小于或等于當(dāng)前容量,容量將保持不變。

        $queue = new DsPriorityQueue();  $queue->allocate(8);

        獲取容量

        當(dāng)前手動(dòng)設(shè)置了容量時(shí),如果設(shè)置的容量大于實(shí)際占用容量,則返回設(shè)置的容量。反之,返回實(shí)際的容量。

        $queue = new DsPriorityQueue();  // 此時(shí)返回默認(rèn)值 8 $queue->capacity();

        設(shè)置優(yōu)先級(jí)

        數(shù)值越大優(yōu)先級(jí)越高

        $queue = new DsPriorityQueue();  $queue->push('value1', 1); $queue->push('value2', 2);

        示例

        $queue = new DsPriorityQueue();  $queue->push('沙僧', 2); $queue->push('唐僧', 5); $queue->push('白龍馬', 1); $queue->push('豬八戒', 3); $queue->push('孫悟空', 4); $cout = $queue->count(); for($i=0; $i<$cout; $i++) {   echo $queue->pop();   echo PHP_EOL; }

        輸出

        唐僧 孫悟空 豬八戒 沙僧 白龍馬

        應(yīng)用場(chǎng)景

        • MySQL 查詢時(shí)為了加快查詢速度,避免排序無法使用索引,沒有進(jìn)行排序,在服務(wù)端代碼層面進(jìn)行手動(dòng)排序再返回。

        • 其他應(yīng)用場(chǎng)景…

        雙端隊(duì)列 Deque

        有兩個(gè)指針分別指向頭部和尾部。分別可以在頭部和尾部進(jìn)行插入和彈出。

        優(yōu)點(diǎn)

        • 支持?jǐn)?shù)組語法(方括號(hào))。

        • 對(duì)于相同數(shù)量的值,比數(shù)組占用更少的內(nèi)存。

        • 當(dāng)其大小下降到足夠低時(shí),自動(dòng)釋放分配的內(nèi)存。

        • get()、set()、push()、pop()、shift()和unshift()都是O(1)。

        缺點(diǎn)

        • 設(shè)置的容量數(shù)值,必須是 2 的冪次方值,默認(rèn)值是 8。比如2^2

        • insert()和remove()是O(n)。

        類方法說明

        雙端隊(duì)列 Deque

        示例

        $deque = new DsDeque(); $deque->push(...['唐僧', '孫悟空', '豬八戒', '沙僧', '白龍馬']); $clone = $deque->copy(); $count = $deque->count(); echo '頭:'.$deque->first().PHP_EOL; echo '尾:'.$deque->last().PHP_EOL; echo '--- 從隊(duì)尾開始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) {     echo $deque->pop();     echo PHP_EOL; }  echo '--- 從隊(duì)頭開始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) {     echo $clone->shift();     echo PHP_EOL; }

        輸出

        頭:唐僧 尾:白龍馬 --- 從隊(duì)尾開始 ---- 白龍馬 沙僧 豬八戒 孫悟空 唐僧 --- 從隊(duì)頭開始 ---- 唐僧 孫悟空 豬八戒 沙僧 白龍馬

        應(yīng)用場(chǎng)景

        • 多種應(yīng)用場(chǎng)景

        隊(duì)列 FIFO(先進(jìn)先出)

        隊(duì)列是“先進(jìn)先出”或“FIFO”集合,它只允許訪問隊(duì)列前面的值。

        示例

        $queue = new DsQueue();  $queue->push('唐僧'); $queue->push(...['孫悟空', '豬八戒']); $queue->push(['沙僧', '白龍馬']); print_r($queue);

        輸出

        DsQueue Object (     [0] => 唐僧     [1] => 孫悟空     [2] => 豬八戒     [3] => Array         (             [0] => 沙僧             [1] => 白龍馬         ) )

        棧 LIFO(先進(jìn)后出)

        Stack 是一個(gè)“后進(jìn)先出”或“LIFO”集合,它只允許訪問結(jié)構(gòu)頂部的值。

        示例

        $Stack = new DsStack();  $Stack->push('唐僧'); $Stack->push(...['孫悟空', '豬八戒']); $Stack->push(...['沙僧', '白龍馬']);  $cout = $Stack->count(); for($i=0; $i<$cout; $i++) {     echo $Stack->pop();     echo PHP_EOL; }

        輸出

        白龍馬 沙僧 豬八戒 孫悟空 唐僧

        Map 字典

        Map 是鍵值對(duì) [key=>value] 的順序集合,與數(shù)組相似。 鍵可以是任何類型,但必須是唯一的。 如果使用相同的鍵將值添加到地圖,后添加的則會(huì)替換之前的值。

        優(yōu)點(diǎn)

        • 鍵和值可以是任何類型,包括對(duì)象

        • 支持?jǐn)?shù)組語法。

        • 保留插入順序。

        • 性能和內(nèi)存效率與數(shù)據(jù)相似。

        • 當(dāng)大小下降到足夠低時(shí)自動(dòng)釋放分配的內(nèi)存。

        缺點(diǎn)

        • 當(dāng)對(duì)象作為鍵時(shí),不能轉(zhuǎn)換為數(shù)組。

        Set 集合

        Set 是一系列唯一值,只有一組 key 不存儲(chǔ) value,而且 key 不能重復(fù)。

        優(yōu)點(diǎn)

        • 值可以是任何類型,包括對(duì)象。

        • 支持?jǐn)?shù)組語法。

        • 保留插入順序。

        • 當(dāng)大小下降到足夠低時(shí)自動(dòng)釋放分配的內(nèi)存。

        • add()、remove()和contains()復(fù)雜度都是O(1)。

        缺點(diǎn)

        • 不支持push()、pop()、insert()、shift()或unshift()

        • 如果在被訪問的索引之前緩沖區(qū)中有被刪除的值,則get()為O(n),否則為O(1)。

        Map 和 Set 的區(qū)別

        • 存儲(chǔ)方式不同。Map 存儲(chǔ)的是 [key => value] 形式,Set 存儲(chǔ)的是 […keys];

        • Map 和 Set 都是通過 key 來保證有序性的,所以是不允許修改 key 的。

        推薦學(xué)習(xí):php視頻教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: jiucao在线观看精品| 国产综合精品蜜芽| 精品一久久香蕉国产线看播放 | 亚洲国产精品婷婷久久| 精品久久久久久久无码| 亚洲精品无码你懂的网站| 成人精品一区二区三区免费看| 国产精品电影网| 国产午夜福利精品久久2021| 在线精品亚洲一区二区三区| 久久久久国产精品麻豆AR影院| 91精品成人免费国产片| 久久精品国产福利国产秒| heyzo高无码国产精品| 人妻少妇乱子伦精品| 最新国产精品无码| 亚洲精品在线视频| 亚洲精品WWW久久久久久| 久久91这里精品国产2020| 欧美日韩精品一区二区在线播放| 97久久久精品综合88久久| 国产精品视频第一区二区三区| 国内少妇偷人精品视频免费| 国产在线精品一区二区中文| 国产午夜无码精品免费看动漫| 精品9E精品视频在线观看| 国产成人精品电影在线观看 | 亚洲高清国产拍精品青青草原| 精品视频在线观看你懂的一区 | 亚洲精品V欧洲精品V日韩精品| 亚洲精品国产综合久久一线| 香蕉99久久国产综合精品宅男自| 久久99亚洲综合精品首页| 久久久无码精品午夜| 四虎精品免费永久免费视频| 综合人妻久久一区二区精品| 无码国内精品人妻少妇| 国产亚洲欧美精品永久| 国产精品美脚玉足脚交欧美| 成人久久精品一区二区三区| 久久久久夜夜夜精品国产|