js模拟hashtable的简单实例



// 简单的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`函数非常简单,因此可能会出现哈希冲突(即不同的键被映射到同一个桶中)。在实际应用中,你需要使用一个更复杂、分布更均匀的哈希函数来减少哈希冲突的发生。