命名空间的摘要。
已知的 Big O 符号
类名 | add | contains | get | hasKey | insert | pop | push | put | remove | set | shift | unshift |
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 OR 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) |
? = 方法可用,Big O 未知。
_ = 方法不可用,但可能存在可比较的行为
例如:`$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 + 优先级
类似于 Queue,但优先级首先决定顺序,FIFO 用于优先级相等的情况
- Map:可散列,键值序列(类似于可比较上下文中数组)
内存使用:类似于数组,更频繁地清除内存
注意:可以使用对象作为键,但这会阻止数组转换
- Deque:双端队列,内存使用量低
注意:缓冲区容量必须为 ^2(2 的幂)
支持
- 接口 Hashable:允许对象用作键(`->hash()` & `->equals()`,回退到 `spl_object_hash()`)
- 类 Pair:JsonSerializable,键值对,由 Map 使用
- 还有更多。