【问题标题】:Vector-Java equivalent in PHP?PHP中的Vector-Java等价物?
【发布时间】:2011-06-06 05:00:38
【问题描述】:

有没有:

1> Vector(Java) 类
2> 列表迭代器
3> 单链表

在 PHP 中可用?

【问题讨论】:

    标签: java php


    【解决方案1】:

    简短的回答是:

    1. 数组
    2. 数组
    3. 数组

    PHP 数组是强大的结构,可以同时用作数组、列表、哈希、队列和堆栈(在其他语言中可能都是不同的类型)。

    如果您需要对类数组构造的行为进行更多控制,Standard PHP Library (SPL) 中有接口和类,您可以实现/使用/扩展。

    【讨论】:

    • 我不会称 PHP 数组完全“强大”,否则我同意你所说的。
    • 但是在 ListIterator + Linkedlist 的情况下,我至少可以通过 Iterator 从 LinkedList 添加/删除元素。如何使用数组在 PHP 中实现相同的功能?如果我没记错的话,在 ListIterator 中添加元素将追加到链接列表中,而不是覆盖 PHP 中该位置的元素
    • @Esko -- 一种可用作数组、字典、堆栈或队列的单一数据类型。它很容易表示树,使用 php 数组的链表。我说这是一个非常强大的结构。
    • @darkie15,不确定你到底想要做什么,我想你可能在 array_splice/array_slice 之后。 PHP 的数组函数可以以您可能需要的任何方式操作数组。如果您有更具体的问题,不妨提出来。
    • @James “强大”这个词的意图是明确设计的东西,而我使用 PHP 的经验表明,其中的任何内容都从未真正设计过,至少不是由有能力的人设计的。我同意它很灵活,我同意用它做任何类型的数据结构都相对简单,但这并不意味着 "array as Everything" 是一个好的设计。跨度>
    【解决方案2】:

    1) 任何 PHP 数组都可以被视为向量并将其用作向量(因为根据定义,向量只是一个可以增大大小的数组,而 PHP 不需要指定数组大小)。正如 java 记录的那样,

    public class Vector 
    extends AbstractList
    implements List, RandomAccess, Cloneable, Serializable
    

    PHP 数组满足所有要求。

    2) 如果你坚持的话,有一个Iterator,但一般来说,使用循环来遍历数组更为常见(就像你并没有真正用迭代器在 Java 中迭代数组,对吗?)

    3) 一般而言,PHP 中没有列表实现(好吧,我打赌内部数组是作为列表/哈希图实现的,但这只是在内部)。您可以选择两个选项之一。如果您只对项目的顺序排序感兴趣(您可以获得随机访问作为奖励),请使用数组(您在这里看到一个模式 - 数组 FTW!),或者您可以使用 2 个小类实现自己的完全 OO 列表(我会打电话给他们ListListCell)

    第 3 部分的补充:不要担心列表中间的插入或删除,因为这些可以通过 array_slicearray_splice 实现。插入和删除在时间上可能不是 O(1),但由于在列表中您还需要 O(n) 时间来定位要在列表中插入的位置,我认为这些选项是可比较的。

    【讨论】:

    • 但是在 ListIterator + Linkedlist 的情况下,我至少可以通过 Iterator 从 LinkedList 添加/删除元素。如何使用数组在 PHP 中实现相同的功能?如果我没记错的话,在 ListIterator 中添加元素将追加到链接列表中,而不是覆盖 PHP 中该位置的元素
    • 我不明白你到底指的是什么,但在 PHP 中你可以unset($array[$idx]) - 从任何位置删除元素而不留空隙; $array[] = $val -- 追加到末尾(还有array_unshift() 用于前置); array_splice() 用于插入中间。
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 2016-12-19
    • 1970-01-01
    • 2021-04-05
    • 2019-11-03
    • 2012-09-14
    • 2010-09-23
    • 2017-06-13
    相关资源
    最近更新 更多