国产精品成人VA在线观看,亚洲日韩在线中文字幕综合,亚洲AV电影天堂男人的天堂,久久人人爽人人爽人人av东京热

News新聞

業(yè)界新聞動(dòng)態(tài)、技術(shù)前沿
Who are we?

您的位置:首頁(yè)      樂道系統(tǒng)FAQ      php 實(shí)現(xiàn)Hash表功能實(shí)例詳解

php 實(shí)現(xiàn)Hash表功能實(shí)例詳解

標(biāo)簽: 發(fā)布日期:2016-11-29 00:00:00 292

php 實(shí)現(xiàn)Hash表功能

Hash表作為最重要的數(shù)據(jù)結(jié)構(gòu)之一,也叫做散列表。使用PHP實(shí)現(xiàn)Hash表的功能。PHP可以模擬實(shí)現(xiàn)Hash表的增刪改查。通過對(duì)key的映射到數(shù)組中的一個(gè)位置來訪問。映射函數(shù)叫做Hash函數(shù),存放記錄的數(shù)組稱為Hash表。

Hash函數(shù)把任意長(zhǎng)度的和類型的key轉(zhuǎn)換成固定長(zhǎng)度輸出。不同的key可能擁有相同的hash。
Hash表的時(shí)間復(fù)雜度為O(1)

<?php
class HashTable{
  private $arr = array();
  private $size = 10;
  public function __construct(){
    //SplFixedArray創(chuàng)建的數(shù)組比一般的Array()效率更高,因?yàn)楦咏麮的數(shù)組。創(chuàng)建時(shí)需要指定尺寸
    $this->arr = new SplFixedArray($this->size);
  }
  /**
   * Description: 簡(jiǎn)單hash算法。輸入key,輸出hash后的整數(shù)
   * @param $key
   * @return int
   */
  private function simpleHash($key){
    $len = strlen($key);
    //key中每個(gè)字符所對(duì)應(yīng)的ASCII的值
    $asciiTotal = 0;
    for($i=0; $i<$len; $i++){
      $asciiTotal += ord($key[$i]);
    }
    return $asciiTotal % $this->size;
  }
  /**
   * Description: 賦值
   * @param $key
   * @param $value
   * @return bool
   */
  public function set($key, $value){
    $hash = $this->simpleHash($key);
    $this->arr[$hash] = $value;
    return true;
  }
  /**
   * Description: 取值
   * @param $key
   * @return mixed
   */
  public function get($key){
    $hash = $this->simpleHash($key);
    return $this->arr[$hash];
  }
  public function getList(){
    return $this->arr;
  }
  public function editSize($size){
    $this->size = $size;
    $this->arr->setSize($size);
  }
}
?>