频道栏目
首页 > 程序开发 > Web开发 > PHP教程 > PHP面试题 > 正文
用PHP实现的HashTable及说明
2016-01-06 17:41:47           
收藏   我要投稿

最近在看凹凸曼和白菜写的书,500多页,其实我真正想看的是PHP扩展部分以及缓存部分。下面是凹凸曼用PHP实现的HashTable代码,其中需要说明的有两点:
1)代码中使用了SplFixedArray,这是一个更接近C语言的数组[Array],而且效率更高。使用之前需要开启SPL扩展,PHP5.3+默认开启。
2)代码中使用拉链法解决冲突,即将所有相同的Hash值的关键字节点链接在同一个链表中。

key=$key; $this->value=$value; $this->nextNode=$nextNode; } } //天涯PHP博客https://blog.phpha.com classHashTable{ private$buckets; private$size=10; publicfunction__construct(){ $this->buckets=newSplFixedArray($this->size); } privatefunctionhashfunc($key){ $strlen=strlen($key); $hashval=0; for($i=0;$i<$strlen;$i++){ $hashval+=ord($key{$i}); } return$hashval%$this->size; } publicfunctioninsert($key,$value){ $index=$this->hashfunc($key); /*新创建一个节点*/ if(isset($this->buckets[$index])){ $newNode=newHashNode($key,$value,$this->buckets[$index]); }else{ $newNode=newHashNode($key,$value,NULL); } $this->buckets[$index]=$newNode;/*保存新节点*/ } publicfunctionfind($key){ $index=$this->hashfunc($key); $current=$this->buckets[$index]; while(isset($current)){/*遍历当前链表*/ if($current->key==$key){/*比较当前节点的关键字*/ return$current->value;/*查找成功*/ } $current=$current->nextNode;/*比较下一个节点*/ } returnNULL;/*查找失败*/ } } //天涯PHP博客https://blog.phpha.com //*******下面是测试代码******* $ht=newHashTable(); $ht->insert('key1','value1'); $ht->insert('key12','value12'); echo$ht->find('key1'); echo$ht->find('key12'); ?>
点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:技术交流论坛中看到的php面试题
下一篇:PHP编程中的经验分享
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站