PHP中的Java HashSet等价物

时间:2012-05-16 06:58:04

标签: java php set hashset

我对php比较陌生,并且很难搞清楚要使用的正确数据结构。假设我有一个FooBar类equals()hashCode()已正确实现。什么样的PHP集合(如果有的话)最像Java的hashSet?我需要一组没有重复的对象。有人建议使用数组和函数array_key_exists,但我只是想知道是否有另一种方法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

从5.2版开始,Php提供了SplObjectStorage,它提供了Java Set的功能:

  • 关注唯一性(同一个对象不能加两次)
  • 轻松浏览集合
  • 轻松检查集合中是否存在对象

检查http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage使用示例

答案 1 :(得分:3)

标准PHP库(SPL)提供的PHP编程语言中几乎没有可用的数据结构。虽然与Java Collections Framework实现相比它们并不算什么,但有时它们通过提供比数组更高级的功能非常有用。您可以找到可用数据结构here的文档。

PHP中最类似HashSet的数据结构是SplObjectStorage

来自文档:

  

SplObjectStorage类提供从对象到数据的映射,或者通过忽略数据来提供对象集。在涉及唯一标识对象的需要的许多情况下,这种双重目的可能很有用。

PHP中的对象不实现equals()hashCode()方法。对象的唯一性由spl_object_hash()函数返回的值确定。 SplObjectStorage类使用相同的值来唯一标识它包含的对象。 SplObjectStorage::getHash($object)方法可用于检索SplObjectStorage集合中包含的对象的标识符。