命名空間摘要。
已知的大 O 表示法
類別名稱 | 新增 | 包含 | 取得 | 擁有鍵值 | 插入 | 彈出 | 推入 | 放入 | 移除 | 設定 | 位移 | 反位移 |
向量 (Vector) | _ | ? | O(1) | _ | O(n) | O(1) | O(1) | _ | O(n) | O(1) | O(n) | O(n) |
堆疊 (Stack) | _ | _ | _ | _ | _ | ? | _ | _ | _ | _ | _ | _ |
集合 (Set) | O(1) | O(1) | O(n 或 1) | _ | _ | _ | _ | _ | O(1) | _ | _ | _ |
佇列 (Queue) | _ | _ | _ | _ | _ | ? | ? | _ | _ | _ | _ | _ |
優先佇列 (PriorityQueue) | _ | _ | _ | _ | _ | ? | ? | _ | _ | _ | _ | _ |
映射 (Map) | _ | _ | O(1) | O(1) | _ | _ | _ | O(1) | O(1) | _ | _ | _ |
雙端佇列 (Deque) | _ | ? | O(1) | ? | ? | O(1) | O(1) | _ | ? | O(1) | O(1) | O(1) |
? = 方法可用,但時間複雜度未知。
_ = 方法不可用,但可能有類似的替代方案。
例如:使用 `$object[] = '';` 來取代 `$object->push('');`。
除了 PriorityQueue 之外,所有其他類別
(Deque、Map、Queue、Set、Stack、Vector) 都實作了 ArrayAccess 介面,
主要介面
- 序列介面 (Sequence): Collection + ArrayAccess
- 集合介面 (Collection): Traversable, Countable, JsonSerializable
- 向量 (Vector): 序列式結構,低記憶體使用量
- 堆疊 (Stack): 破壞性迭代;後進先出 (LIFO)
註:只能存取堆疊頂部的項目
- 集合 (Set): 可雜湊,唯一值
- 佇列 (Queue): 破壞性迭代;先進先出 (FIFO)
註:只能存取佇列前端的項目
- 優先佇列 (PriorityQueue): 破壞性迭代;FIFO + 優先級
類似佇列,但優先級決定順序,優先級相同時則以 FIFO 處理
- 映射 (Map): 可雜湊,鍵值序列(類似陣列)
記憶體使用量:類似陣列,更頻繁地清除記憶體
註:可以使用物件作為鍵,但這會阻止轉換為陣列
- 雙端佇列 (Deque): 低記憶體使用量
註:緩衝區容量必須是 2 的次方
支援
- 可雜湊介面 (Hashable): 允許物件用作鍵 (`->hash()` 和 `->equals()`,預設使用 `spl_object_hash()`)
- 鍵值對類別 (Pair): JsonSerializable,鍵值對,由 Map 使用
- 以及其他。