【发布时间】:2020-12-30 02:34:30
【问题描述】:
我正在尝试使用 javascript 实现哈希表。目前,到目前为止一切正常,但我的 get 方法在给定特定键的情况下检索哈希表中的值时遇到问题。我正在使用线性探测以避免碰撞。当我散列键“Alejandro”时,我将键映射到 0 索引。然后我将它添加到我的哈希表中。然后我尝试“Rosalby”,它也映射到 0 索引。我使用线性探测来查找下一个可用插槽,在我的情况下,空索引是 1,我将 Rosalby 的值放在该插槽中。到目前为止,我似乎很好地管理了我的碰撞。然而;当我尝试在我的 get 方法中获取值时,我无法获得正确的值,这就是我的哈希表的样子。
另外,我想提一下,我已经使我的哈希表更大,并且我得到了给定特定键的正确值,这仅仅是因为我没有冲突。提前谢谢你。
// Hash table implementation
class HashTable {
// constructor functio
constructor(size) {
this.size = size;
this.buckets = this.initArray(size);
this.limit = 0;
}
// init array function
initArray(size) {
// init an array
const array = [];
// populate the array base on the size
for (let i = 0; i < size; i++) {
// push null to the array
array.push(null);
}
// return the array
return array;
}
// mapping key to index
hash(key) {
let total = 0;
// get unique code of character in the string
for (let i = 0; i < key.length; i++) {
let keyCode = key.charCodeAt(i)
// console.log("Key code:", keyCode)
// sum up the unique code
total += keyCode;
// console.log(total);
}
// mod the total to the size of the hash table
const hashIndex = total % this.size;
// return that index
return hashIndex;
}
// put method
put(key, value) {
// throw an erro if hashTable is full
if (this.limit >= this.size) throw "Hash Table is full";
// hash the key
let hashIndex = this.hash(key);
// console.log(hashIndex);
// linear probing
while (this.buckets[hashIndex] != null) {
hashIndex++;
hashIndex = hashIndex % this.size;
}
// add the value at that key to the buckets array
this.buckets[hashIndex] = value;
// increase the limit
this.limit++;
}
// get method
get(key) {
// hash the key
let hashIndex = this.hash(key);
let value = this.buckets[hashIndex];
// return the value at that index
return value;
}
} // end of hash table
// sanity check
const ht = new HashTable(3);
console.log(ht);
// ht.hash("Rosalby");
console.log();
ht.put("Alejandro", "555-5555");
ht.put("Rosalby", "123-1231");
ht.put("Lalaland", "000-0000");
// ht.put("Lalaland", "919-1919");
console.log();
console.log(ht);
console.log("Alejandro:", ht.get("Alejandro"), "Rosalby:", ht.get("Rosalby"), "Lalaland:", ht.get("Lalaland"));
【问题讨论】:
标签: javascript data-structures hash hashtable