【问题标题】:Why is % used to calculate hashCode index conversion?为什么使用 % 来计算 hashCode 索引转换?
【发布时间】:2017-12-12 09:14:48
【问题描述】:

假设我的哈希表的桶数是 100。对于密钥 A,我的哈希码为 500,对于密钥 B,我的哈希码为 600。对于 hashCode % this.bucketCount,它们都解析为 0,这是不同哈希码的冲突。

我想知道为什么使用% 来计算索引。有人可以解释一下这个数学吗?为什么该数学输出的索引是我应该插入节点的位置?

HashTable.prototype.hashFunction = function(key){
    var hash = 0;
    for (var i=0;i< key.length; i++){
        console.log(key.charCodeAt(i))
        hash += key.charCodeAt(i)
    }
    return hash;
};

HashTable.prototype.convertHashToIndex = function(hashCode) {
    return hashCode % this.bucketCount;
};

【问题讨论】:

    标签: javascript hashtable


    【解决方案1】:

    因为有bucketCount 桶,所以使用除以桶数的模数(或余数)来确保结果适合在可用桶中。如果您不取模数,您将获得结果而无法存储它们。

    【讨论】:

    • 呃,有道理。然后,如果 hashCodes 获得相同的索引,我只需通过在该索引处遍历返回的存储桶(链表)并将节点附加到列表的末尾来处理这种冲突
    • @Growler 或者插入到列表的头部(或者如果你喜欢,也可以在列表中的某个位置)。但是,是的,这通常是处理冲突的方式。
    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2020-12-12
    • 2010-11-09
    相关资源
    最近更新 更多