-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathHashTable.php
84 lines (75 loc) · 1.85 KB
/
HashTable.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
/**
* 没有考虑hash码冲突的情况
* Created by PhpStorm.
* Author: evolution
* Date: 16-7-8
* Time: 上午9:33
*
* license GPL
*/
class HashTable
{
//hashtable size
private $size = 100;
private $buckets;
/**
* 初始化hash表
*/
public function __construct(){
$this->buckets = new SplFixedArray($this->size);
}
/**
* hash 函数
*
* @author: jichao.wang <braveontheroad@gmail.com>
*
* @param $key
*
* @return int
*/
private function hashFunc($key){
// $len = strlen($key);
// $sum = 0;
// for($i=0; $i<$len; $i++){
// $sum += ord($key[$i]);
// }
$sum = crc32($key);
return $sum % $this->size;
}
/**
* 添加元素到hash表中
*
* @author: jichao.wang <braveontheroad@gmail.com>
*
* @param $key
* @param $value
*/
public function add($key, $value){
$index = $this->hashFunc($key);
$this->buckets[$index] = $value;
return true;
}
/**
* 查找元素
* @author: jichao.wang <braveontheroad@gmail.com>
*
* @param $key
*/
public function find($key){
$index = $this->hashFunc($key);
if(isset($this->buckets[$index])){
return $this->buckets[$index];
}
return NULL;
}
/**
* 获取hashTable中的所有元素
*
* @author: jichao.wang <braveontheroad@gmail.com>
* @return mixed
*/
public function findAll(){
return $this->buckets;
}
}