PHP的SplDoublyLinkedList类的意义是什么,更重要的是,一般的链接列表?

2022-08-30 20:06:07

为了扩展我的编程能力,我对标准PHP库进行了深入研究。这导致我发现了SplDoublyLinkedList类。从那里,我阅读了维基百科上链接列表双链列表的描述。

我了解它们是如何工作的...但是我无法想象为什么我们需要它的原因 - 或者更好的是一个实际的例子,因为我们在PHP中具有索引和关联数组。SplDoublyLinkedList

链接列表通常如何在PHP内外使用?


答案 1

SPL 数据结构可降低内存消耗并提高性能。很好的解释:

数据结构本质上是与语言无关的,并且作为一组基于数学的逻辑概念存在。这些容器根据需要使用不同的算法来最大化效率。

例如,如果您不需要关联数组的哈希映射功能-也就是说,如果您不将数组键用于特定目的,而只需要枚举数组--SplFixedArray(以前称为SplFastArray,目前未记录)可能是合适的替代品。唯一需要注意的是,数组的大小是固定的,这意味着在实例化类时必须指定大小,如果尝试存储的元素数超过该数目,则会发生错误。这就是平均而言,它比标准PHP数组性能更好的原因。

http://web.archive.org/web/20130805120049/http://blueparabola.com/blog/spl-deserves-some-reiteration

在组成 PHP 解释器的 C 代码中,数组被实现为称为哈希表或哈希映射的数据结构。当数组中包含的值被其索引引用时,PHP 使用哈希函数将该索引转换为表示数组中相应值位置的唯一哈希。

此哈希映射实现使数组能够存储任意数量的元素,并使用数字或字符串键同时提供对所有这些元素的访问。数组因其提供的功能而非常快,并且是一种出色的通用数据结构。

在计算机科学中,列表被定义为值的有序集合。链接列表是一种数据结构,其中列表中的每个元素都包含对列表中其两侧的一个或两个元素的引用。术语“双链表”用于指代后一种情况。在SPL中,这采用SplDoublyLinkedList类的形式。当事先不知道要存储的元素数量并且只需要按顺序位置访问元素时,使用列表是有意义的。

http://matthewturland.com/2010/05/20/new-spl-features-in-php-5-3/


答案 2

首先,SplDoublyLinkedList是对象,因此

  • 它们可以扩展,因此您可以重写它们的方法(例如,您可以返回所有大写的字符串等)
  • 它们可以像myfunc( SplDoublyLinkedList $var ) ...
  • 默认情况下,它们作为引用传递
  • 等。

其次,SplDoublyLinkedList接受迭代模式,因此您可以随时随地删除项目,并切换方向,而无需对数组重新排序或使代码复杂化:

SplDoublyLinkedList::IT_MODE_LIFO (Stack style)

SplDoublyLinkedList::IT_MODE_FIFO (Queue style) 迭代器的行为(一个或另一个)

SplDoublyLinkedList::IT_MODE_DELETE (元素被迭代器删除)

SplDoublyLinkedList::IT_MODE_KEEP (元素由迭代器遍历)

上面的引文来自 http://simpletechinfo.com/SplDoublyLinkedList 其中包含一些代码示例。

还有其他好处(例如,不必在内存中复制所有数据等)


推荐