【发布时间】:2011-06-06 05:00:38
【问题描述】:
有没有:
1> Vector(Java) 类
2> 列表迭代器
3> 单链表
在 PHP 中可用?
【问题讨论】:
有没有:
1> Vector(Java) 类
2> 列表迭代器
3> 单链表
在 PHP 中可用?
【问题讨论】:
简短的回答是:
PHP 数组是强大的结构,可以同时用作数组、列表、哈希、队列和堆栈(在其他语言中可能都是不同的类型)。
如果您需要对类数组构造的行为进行更多控制,Standard PHP Library (SPL) 中有接口和类,您可以实现/使用/扩展。
【讨论】:
1) 任何 PHP 数组都可以被视为向量并将其用作向量(因为根据定义,向量只是一个可以增大大小的数组,而 PHP 不需要指定数组大小)。正如 java 记录的那样,
public class Vector
extends AbstractList
implements List, RandomAccess, Cloneable, Serializable
PHP 数组满足所有要求。
2) 如果你坚持的话,有一个Iterator,但一般来说,使用循环来遍历数组更为常见(就像你并没有真正用迭代器在 Java 中迭代数组,对吗?)
3) 一般而言,PHP 中没有列表实现(好吧,我打赌内部数组是作为列表/哈希图实现的,但这只是在内部)。您可以选择两个选项之一。如果您只对项目的顺序排序感兴趣(您可以获得随机访问作为奖励),请使用数组(您在这里看到一个模式 - 数组 FTW!),或者您可以使用 2 个小类实现自己的完全 OO 列表(我会打电话给他们List 和ListCell)
第 3 部分的补充:不要担心列表中间的插入或删除,因为这些可以通过 array_slice 和 array_splice 实现。插入和删除在时间上可能不是 O(1),但由于在列表中您还需要 O(n) 时间来定位要在列表中插入的位置,我认为这些选项是可比较的。
【讨论】:
unset($array[$idx]) - 从任何位置删除元素而不留空隙; $array[] = $val -- 追加到末尾(还有array_unshift() 用于前置); array_splice() 用于插入中间。