溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中Data Structures擴展的作用是什么

發(fā)布時間:2021-07-27 17:46:52 來源:億速云 閱讀:95 作者:Leah 欄目:編程語言

本篇文章為大家展示了php中Data Structures擴展的作用是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

在 PHP 中因為數組太過強大,把這些數據結構都囊括進來了,所以不太需要去關注這些數據結構,久而久之這些概念也就淡化了,不是說 PHP 中沒有數據結構。

在 PHP 中有個擴展 Data Structures,這個擴展包含了這些常見的 數據結構。

PHP 數據結構

  • 優(yōu)先級隊列 PriorityQueue

  • 雙端隊列 Deque

  • 隊列 FIFO(先進先出)

  • 棧 LIFO(先進后出)

  • 散列表 Hash

  • Set 集合

  • Map 字典

數據結構介紹

優(yōu)先級隊列 PriorityQueue

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

注意

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

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

設置容量

默認容量是 8,可以手動設置容量,這個容量不是指隊列的長度,而是說存儲空間。再分配容量時確保有足夠的內存

如果該值小于或等于當前容量,容量將保持不變。

$queue = new Ds\PriorityQueue(); 
$queue->allocate(8);
獲取容量

當前手動設置了容量時,如果設置的容量大于實際占用容量,則返回設置的容量。反之,返回實際的容量。

$queue = new Ds\PriorityQueue(); 
// 此時返回默認值 8
$queue->capacity();
設置優(yōu)先級

數值越大優(yōu)先級越高

$queue = new Ds\PriorityQueue(); 
$queue->push('value1', 1);
$queue->push('value2', 2);
示例
$queue = new Ds\PriorityQueue(); 
$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;
}
輸出
唐僧
孫悟空
豬八戒
沙僧
白龍馬
應用場景
  • MySQL 查詢時為了加快查詢速度,避免排序無法使用索引,沒有進行排序,在服務端代碼層面進行手動排序再返回。

  • 其他應用場景...

雙端隊列 Deque

有兩個指針分別指向頭部和尾部。分別可以在頭部和尾部進行插入和彈出。

優(yōu)點
  • 支持數組語法(方括號)。

  • 對于相同數量的值,比數組占用更少的內存。

  • 當其大小下降到足夠低時,自動釋放分配的內存。

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

缺點
  • 設置的容量數值,必須是 2 的冪次方值,默認值是 8。比如2^2

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

類方法說明

雙端隊列 Deque

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

echo '--- 從隊頭開始 ----'.PHP_EOL;
for($i=0; $i<$count; $i++) {
    echo $clone->shift();
    echo PHP_EOL;
}
輸出
頭:唐僧
尾:白龍馬
--- 從隊尾開始 ----
白龍馬
沙僧
豬八戒
孫悟空
唐僧
--- 從隊頭開始 ----
唐僧
孫悟空
豬八戒
沙僧
白龍馬
應用場景
  • 多種應用場景

隊列 FIFO(先進先出)

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

示例
$queue = new Ds\Queue(); 
$queue->push('唐僧');
$queue->push(...['孫悟空', '豬八戒']);
$queue->push(['沙僧', '白龍馬']);
print_r($queue);
輸出
Ds\Queue Object
(
    [0] => 唐僧
    [1] => 孫悟空
    [2] => 豬八戒
    [3] => Array
        (
            [0] => 沙僧
            [1] => 白龍馬
        )
)

棧 LIFO(先進后出)

Stack 是一個“后進先出”或“LIFO”集合,它只允許訪問結構頂部的值。

示例
$Stack = new Ds\Stack(); 
$Stack->push('唐僧');
$Stack->push(...['孫悟空', '豬八戒']);
$Stack->push(...['沙僧', '白龍馬']);

$cout = $Stack->count();
for($i=0; $i<$cout; $i++) {
    echo $Stack->pop();
    echo PHP_EOL;
}
輸出
白龍馬
沙僧
豬八戒
孫悟空
唐僧

Map 字典

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

優(yōu)點
  • 鍵和值可以是任何類型,包括對象

  • 支持數組語法。

  • 保留插入順序。

  • 性能和內存效率與數據相似。

  • 當大小下降到足夠低時自動釋放分配的內存。

缺點
  • 當對象作為鍵時,不能轉換為數組。

Set 集合

Set 是一系列唯一值,只有一組 key 不存儲 value,而且 key 不能重復。

優(yōu)點
  • 值可以是任何類型,包括對象。

  • 支持數組語法。

  • 保留插入順序。

  • 當大小下降到足夠低時自動釋放分配的內存。

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

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

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

Map 和 Set 的區(qū)別

  • 存儲方式不同。Map 存儲的是 [key => value] 形式,Set 存儲的是 [...keys];

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

上述內容就是php中Data Structures擴展的作用是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI