|
|
1
7
SPL数据结构减少了内存消耗并提高了性能。好的解释:
http://web.archive.org/web/20130805120049/http://blueparabola.com/blog/spl-deserves-some-reiteration
http://matthewturland.com/2010/05/20/new-spl-features-in-php-5-3/ |
|
|
2
4
根据 Wikipedia ,
所以要回答你的问题,我不知道。:) |
|
|
3
3
首先, SplDoubleLink列表 是对象,例如
其次, SplDoubleLink列表 接受迭代模式,这样您就可以在移动中删除项目,并在不重新排序数组或使代码复杂化的情况下切换方向:
以上报价来自 http://simpletechinfo.com/SplDoublyLinkedList 其中包含一些代码示例。 还有其他的好处(比如foreach不必在内存中复制所有数据等) |
|
|
4
0
它们之所以存在,是因为许多混合了其他语言的程序员习惯于数组大小固定的情况,而您必须注意内存管理。
|
|
|
5
0
正如其他人提到的,列表是其他语言中常见的固定数组的替代方法。但一个经常被忽视的重要方面是,您可以非常有效地从列表中的任何位置插入或删除元素。 为什么这很重要?假设您有几个要在一个数组中保持排序的项目,也许这样您就不必稍后对它们进行排序,或者只是为了最小化搜索时间。在这种情况下,列表是一个非常强大的工具。尤其是对于非常大的数据集。 |
|
|
6
0
你可能是对的,只是不太有用。 理论上,链表有很多用途(尤其是跳舞链表)。但其中大多数涉及到在其他地方存储和克隆迭代器、从两个以上的方向访问内容,或者拆分和合并列表。spldubleLinkedList似乎没有这些。 如果不适用于算法,一种用法是允许对象在某个列表中以恒定的时间删除其自身的引用,释放其内存,并且在插入或删除后不必改变列表的顺序(通过散列或与最后一项交换)。但这需要在这些对象中存储列表的迭代器。 如果没有这些功能,它们的行为就像两个Deques。如果只需要使用迭代器访问项,它们就像两个堆栈。在单线程简单情况下,一个更好的方法是使用两个堆栈(可能是固定数组,也可能是同一数组的两端)。每当您希望迭代器移动时,从一个堆栈中弹出并将其推送到另一个堆栈,并且一个堆栈的顶部是当前项。如果您还需要访问头部和尾部,您需要用Deques替换堆栈。 但是,如果您想在不知道最大大小的情况下实现栈或deques本身,或者甚至想分配普通链表的节点(在没有这些库的语言中,比如在PHP中),好的方法是使用没有这些功能的双链表将一些固定数组链接在一起。不知怎么的,你仍然需要它。 PHP文档本身,就像Java语言一样,表明它们应该只是一个支持一些奇怪的特性的DeQueD,而不是两个DeGuy(我想)。如果你真的需要双重链接列表,不要使用它们。 |