PHP 大会日本 2024

简介

为 PHP 7 提供的高效数据结构,作为 数组 的替代方案。

请参阅 » 这篇博文 以获取基准测试、讨论和常见问题解答。

添加注释

用户贡献的注释 1 条注释

11
immemosol
2 年前
命名空间的总结。

已知的 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 使用
- 以及更多。
To Top