什么是散列表?
散列表(Hash table)也叫哈希表,是根据关键码值(Key value,键值)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
散列表的特点:
- 散列表中的每个元素有一个键值和键值所对应的数值
- 查找散列表中的元素必须得首先根据键值,通过散列函数找到元素所在的位置才能访问到
散列表的作用:
散列表的作用就是尽可能快地在数据结构中找到一个值。
js实现散列表的定义及基本方法:
首先定义一个散列表,声明该结构的属性,代码如下:
function HashTable() {
//定义存放元素的数组
var table = [];
}
散列表中一个很重要的方法就是散列函数,这是HashTable类中的一个私有方法。在这里的散列函数就是简单地将每个键值中的每个字母的ASCII值相加,具体代码为:
//定义常用的散列函数---简单地将每个键值中的每个字母的ASCII值相加
var loseloseHashCode = function (key) {
var hash = 0; //该变量来存储ASCII值的总和
for (var i = 0; i < key.length; i++){
hash += key.charCodeAt(i);
}
return hash % 37;
}
有了散列函数,就可以定义散列表的一些基本方法,如向散列表中添加一个新的项, 根据键值从散列表中移除值以及根据键值检索特定的值,具体代码如下:
//向散列表中增加一个新的项
this.put = function (key , value) {
var position = loseloseHashCode(key);//根据所创建的散列函数计算出键值所在的位置
console.log(position + '-' + key);
table[position] = value; //将value添加到用散列函数计算出的对应的位置上
}
//根据键值搜索键值所对应的值
this.get = function (key) {
return table[loseloseHashCode(key)];
}
//根据键值从散列表中移除该键值所对应的数值
this.remove = function (key) {
table[loseloseHashCode(key)] = undefined;
}
使用散列表:
使用散列表就是简单的调用以上的函数,然后查看输出的结果,具体代码如下:
var hash = new HashTable();
hash.put('Tom','tom@163.com');//输出8-Tom
hash.put('John','john@163.com');//输出29-John
hash.put('Rose','rose@163.com');//输出2-Rose
console.log(hash.get('Tom'));//输出tom@163.com
console.log(hash.get('Rose'));//输出rose@163.com
hash.remove('John');
console.log(hash.get('John'));//输出undefined