php 实现hashmap
在 PHP 中实现类似 HashMap 的功能可以通过数组或 SplObjectStorage 类完成,因为 PHP 的数组本身支持键值对结构,且键可以是整数或字符串。以下是具体实现方法:

使用关联数组
PHP 的关联数组天然支持键值对映射,操作方式与 HashMap 类似:

// 初始化
$hashMap = [];
// 添加元素
$hashMap["key1"] = "value1";
$hashMap["key2"] = 100;
// 获取元素
$value = $hashMap["key1"]; // 输出 "value1"
// 检查键是否存在
if (array_key_exists("key1", $hashMap)) {
echo "Key exists";
}
// 删除元素
unset($hashMap["key1"]);
// 遍历元素
foreach ($hashMap as $key => $value) {
echo "$key => $value\n";
}
使用 SplObjectStorage(对象作为键)
若需以对象作为键,SplObjectStorage 是更合适的选择:
// 初始化
$storage = new SplObjectStorage();
// 创建对象键
$keyObj1 = new stdClass();
$keyObj2 = new stdClass();
// 添加元素
$storage[$keyObj1] = "value1";
$storage[$keyObj2] = ["data" => 123];
// 获取元素
$value = $storage[$keyObj1]; // 输出 "value1"
// 检查键是否存在
if ($storage->contains($keyObj1)) {
echo "Key exists";
}
// 删除元素
$storage->detach($keyObj1);
// 遍历元素
foreach ($storage as $key) {
echo $storage[$key] . "\n";
}
自定义 HashMap 类
如需封装更多功能,可自定义类:
class HashMap {
private $array = [];
public function put($key, $value) {
$this->array[$key] = $value;
}
public function get($key) {
return $this->array[$key] ?? null;
}
public function contains($key) {
return array_key_exists($key, $this->array);
}
public function remove($key) {
unset($this->array[$key]);
}
public function size() {
return count($this->array);
}
}
// 使用示例
$map = new HashMap();
$map->put("name", "Alice");
echo $map->get("name"); // 输出 "Alice"
注意事项
- PHP 数组的键只能是整数或字符串,若需复杂类型(如对象),需使用
SplObjectStorage。 - 关联数组的哈希冲突由 PHP 内部处理,无需手动实现。
- 自定义类可根据需求扩展更多方法(如迭代器接口)。






