function hashFn(string, limit = 7) {
// 自己采用的一个质数(无强制要求,质数即可)
const PRIME = 31;
// 1、定义存储 hashCode 的变量
let hashCode = 0;
// 2、使用霍纳法则(秦九韶算法),获取字符unicode码,计算 hashCode 的值
for (let item of string) {
hashCode = PRIME * hashCode + item.charCodeAt();
}
// 3、对 hashCode 取余,并返回
return hashCode % limit;
}
function HashTable() {
this.storage = [];
this.limit = 7; // 哈希表长度
this.count = 0; // 存储元素
HashTable.prototype.put = function(key,value) {
// 根据关键字获取index
let index = hashFn(key,this.limit);
let bucket = this.storage[index];
if(bucket == null) {
bucket = [];
this.storage[index] = bucket;
}
// 遍历bucket,判断是否为修改操作
for(let item of bucket ) {
if(item[0] == key) {
item[1] = value
return
}
}
// 全部遍历没有一样的key,则为修改操作
bucket.push([key,value]);
this.count++;
}
HashTable.prototype.get = function(key) {
let index = hashFn(key,this.limit);
let bucket = this.storage[index];
if(!bucket) {
return null;
}
for(let tuple of bucket) {
if(tuple[0] == key) {
return tuple[1]
}
}
return null;
}
HashTable.prototype.resize = function(newLimit) {
// 保存旧内容
const oldStorage = this.storage;
// 重置所有属性,现在是一个新storage
this.storage = [];
this.limit = 0;
this.count = 0;
// 遍历oldStorage内容
for(let bucket of oldStorage) {
// 判断bucket是否为null
if(bucket === null) {
continue;
}
// 有数据则遍历bucket
for(tuple of bucket) {
// 放入新storage中
this.put(tuple[0],tuple[1])
}
}
}
HashTable.prototype.isPrime = function isPrime(num) {
for(let i = 2; i < parseInt(Math.sqrt(num)); i++) {
if(num % i) {
return false
}
}
return true
}
}
console.log(isPrime(1))
console