散列关键是 将要传进来的数值的散列值计算,然后将计算得到的散列值作为该数值的下标存进数组里,数组的长度得事先声明。
function Hashtable(){
this.table=new Array(137);
this.simpleHash=simpleHash;
this.betterHash=betterHash;
this.showDistro=showDistro;
this.put=put;
// this.get=get;
}
function put(data){
var pos=this.betterHash(data);
this.table[pos]=data;
}
//一般的散列值计算
function simpleHash(data){
var total=0;
for(var i=0;i<data.length;++i){
total+=data.charCodeAt(i);
}
return total % this.table.length;
}
//优化后的散列值计算,霍纳算法
function betterHash(string){
const H=37;
var total=0;
for(var i=0;i<string.length;i++){
total+=H*total+string.charCodeAt(i);
}
total=total%this.table.length;
if(total<0){
total+=this.table.length-1;
}
return parseInt(total);
}
//显示散列表中的键值和数据
function showDistro(){
var n=0;
for(var i=0;i<this.table.length;++i){
if(this.table[i]!=undefined){
console.log(i+": "+this.table[i]);
}
}
}
var someNames=["divid1","czsee2","cvfasca1","czsee1","gfdgd","drfg"];
var hTable=new Hashtable();
for(var i=0;i<someNames.length;++i){
hTable.put(someNames[i]);
}
hTable.showDistro();