久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

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

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

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

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

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

      在 PHP 中有個(gè)擴(kuò)展 Data Structures,這個(gè)擴(kuò)展包含了這些常見(jiàn)的 數(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)度,而是說(shuō)存儲(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 查詢(xún)時(shí)為了加快查詢(xún)速度,避免排序無(wú)法使用索引,沒(méi)有進(jìn)行排序,在服務(wù)端代碼層面進(jìn)行手動(dòng)排序再返回。

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

      雙端隊(duì)列 Deque

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

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

      • 支持?jǐn)?shù)組語(yǔ)法(方括號(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)。

      類(lèi)方法說(shuō)明

      雙端隊(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ì)尾開(kāi)始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) {     echo $deque->pop();     echo PHP_EOL; }  echo '--- 從隊(duì)頭開(kāi)始 ----'.PHP_EOL; for($i=0; $i<$count; $i++) {     echo $clone->shift();     echo PHP_EOL; }

      輸出

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

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

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

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

      隊(duì)列是“先進(jìn)先出”或“FIFO”集合,它只允許訪問(wèn)隊(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”集合,它只允許訪問(wèn)結(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ù)組相似。 鍵可以是任何類(lèi)型,但必須是唯一的。 如果使用相同的鍵將值添加到地圖,后添加的則會(huì)替換之前的值。

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

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

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

      • 保留插入順序。

      • 性能和內(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)

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

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

      • 保留插入順序。

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

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

      缺點(diǎn)

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

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

      Map 和 Set 的區(qū)別

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

      • Map 和 Set 都是通過(guò) key 來(lái)保證有序性的,所以是不允許修改 key 的。

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

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)