// 简单的Hashtable模拟实现
class SimpleHashtable {
constructor(size = 10) {
this.size = size;
this.buckets = new Array(size).fill(null).map(() => []);
}
// 计算哈希值
hash(key) {
const hash = 0; // 这里简化为0,实际应用中应该是一个复杂的哈希函数
// 示例中直接使用key % this.size模拟哈希冲突前的简单分配
return key % this.size;
}
// 设置键值对
set(key, value) {
const index = this.hash(key);
// 遍历桶中的元素,查找相同的key并替换value,或者添加到桶中
for (let i = 0; i < this.buckets[index].length; i++) {
if (this.buckets[index][i][0] === key) {
this.buckets[index][i][1] = value;
return;
}
}
this.buckets[index].push([key, value]);
}
// 获取键对应的值
get(key) {
const index = this.hash(key);
for (let i = 0; i < this.buckets[index].length; i++) {
if (this.buckets[index][i][0] === key) {
return this.buckets[index][i][1];
}
}
return undefined; // 如果没有找到,返回undefined
}
}
// 使用示例
const hashtable = new SimpleHashtable();
hashtable.set('apple', 'A sweet fruit');
console.log(hashtable.get('apple')); // 输出: A sweet fruit
console.log(hashtable.get('banana')); // 输出: undefined
注意:这个简单的Hashtable实现使用了数组来模拟哈希表的桶结构,并通过`hash`函数(这里简化为`key % this.size`)来计算哈希值,然后将键值对存储在对应的桶中。由于这里`hash`函数非常简单,因此可能会出现哈希冲突(即不同的键被映射到同一个桶中)。在实际应用中,你需要使用一个更复杂、分布更均匀的哈希函数来减少哈希冲突的发生。