Linear probing
線性探測
by Chris_Walter
JavaScript
class ValuePair {
constructor(key, value) {
this.key = key;
this.value = value;
}
}
class HashTableLinearProbing {
constructor() {
this.table = [];
}
hash(key) {
let sum = 0;
for (let i = 0; i < key.length; i++) {
sum += key.charCodeAt(i);
}
return sum % 37;
}
//如果位置為undefined表示這位置還沒有元素,但如果這位置被佔走就index++,直到這位置沒有任何元素才會把
put(key, value) {
let position = this.hash(key);
if (this.table[position] === undefined) {
this.table[position] = new ValuePair(key, value);
} else {
let index = ++position;
while (this.table[index] !== undefined) {
index++;
}
this.table[index] = new ValuePair(key, value);
}
}
get(key) {
let position = this.hash(key);
if (this.table[position] !== undefined) {
if (this.table[position].key === key) {
return this.table[position].value;
} else {
let index = ++position;
while (this.table[index] === undefined || this.table[index].key !== key) {
index++;
}
if (this.table[index].key === key) {
return this.table[index].value;
}
}
}
return undefined;
}
remove(key) {
let position = this.hash(key);
if (this.table[position] !== undefined) {
if (this.table[position].key === key) {
this.table[position] = undefined;
} else {
let index = ++position;
while (this.table[index] === undefined || this.table[index].key !== key) {
index++;
}
if (this.table[index].key === key) {
this.table[index] = undefined;
}
}
}
return undefined;
}
}
let hashtable1 = new HashTableLinearProbing();
hashtable1.put('Strawberry', 45);
console.log(hashtable1.get('Strawberry'));
console.log(hashtable1.remove('Strawberry', 45));