国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

拉鏈法解決Hash節點沖突問題

2019-11-15 01:40:04
字體:
來源:轉載
供稿:網友
拉鏈法解決Hash節點沖突問題
<?php/* * hash::拉鏈法解決hash節點存儲沖突問題 * ::2014-07-02 * ::Small_Kind */class small_hash {      PRivate $size = 20;//hash節點大小  private $zone = null;//hash空間      //實例化函數,并設置一個初始hash節點大小,如果節點大小為null,則為默認節點大小  final public function __construct($size = null){    if(!is_null($size))$this->size = $size;//    $this->zone = new SplFixedArray($this->size);//  }    //times33::計算key的hash值,并進行節點大小的取模工作  //::實現流程1、計算key長度2、循環長度,并將每個字符轉換成asicc碼后*33  final private function hash_times33($key){      if(empty($key))return false;//key==>empty      $strlen = strlen($key);      $hash_val = 0;      for($i=0;$i<$strlen;$i++){          $hash_val += ($hash_val * 33) + ord($key{$i});      }      return ($hash_val & 0x7FFFFFFF) % $this->size;  }    //set::通過拉鏈法進行key->value對應的值設置  final public function set($key,$value){      if(empty($key) || empty($value))return false;//empty      $index = $this->hash_times33($key);      //如果不存在此節點的數據,則向該節點添加第一組數據      if(isset($this->zone[$index])){          //key、value、拉鏈對象[當該節點已存在1個或多組數據的時候,將之前的數據賦值給最新的一組data]          //也就是說在查詢時候相當于一種后進先出的原則,不斷將最新的數據放在最前面,以此形成一種階梯形式          $data = array($key,serialize($value),$this->zone[$index]);      }else{          $data = array($key,serialize($value),null);//key、value、拉鏈對象[當該節點是第一次有值的時候,拉鏈對象為null]      }      return $this->zone[$index] = $data;//最后將完整的data賦值給該節點  }    //get::通過key獲取對應hash后對應的的節點,循環該對象節點,然后通過key值匹配節點中的key,并將值進行返回  final public function get($key){      $index  = $this->hash_times33($key);      $handle = new stdClass();//初始化一個對象      $handle = (array)$this->zone[$index];//查詢該key對應的節點      return $this->for_match($key,$handle);//將對象數組送入匹配函數進行迭代查詢  }    //for_match::通過key對handle進行迭代查詢,查詢到了即返回,沒有查詢到則返回一個false  final public function for_match($key,$handle){      if(is_array($handle)){          if($handle[0] == $key){              return unserialize($handle[1]);//如果找到值了,則對值進行返回          }else{              return $this->for_match($key,$handle[2]);//否則繼續迭代該方法          }      }  }}$hand = new small_hash();$hand->set('Libin','WWW.BAIDU.COM');$hand->set('d24150ddd','WWW.PHP.COM');var_dump($hand->get('Libin'));var_dump($hand->get('d24150ddd'));?>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永康市| 平乡县| 雷州市| 台湾省| 德令哈市| 丰镇市| 南漳县| 达州市| 晋宁县| 海晏县| 华容县| 西安市| 阜南县| 越西县| 苏尼特右旗| 蓝山县| 鹿邑县| 苍梧县| 博湖县| 榆社县| 石门县| 建阳市| 迁西县| 德令哈市| 沛县| 韶关市| 云梦县| 和顺县| 永城市| 中牟县| 昌邑市| 永清县| 剑川县| 重庆市| 福州市| 平舆县| 武义县| 喀喇| 诸暨市| 漳平市| 保德县|