0
假设我的散列表的桶数为100。我的散列码对于关键字A来说是500
,对于关键字B是600
。这两个对于hashCode % this.bucketCount
来说分辨率为0
,这是对不同散列码的冲突。为什么用%来计算hashCode索引转换?
我想知道为什么使用%
来计算索引。有人可以解释这个数学吗?为什么该数学输出的索引是我应该插入节点的地方?
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;
};
Duh,有道理。然后,如果hashCodes获得相同的索引,我只需通过在该索引处散步返回的存储区(链接列表)并将节点附加到列表的末尾来处理此冲突 – Growler
@Growler或者插入列表头部(或某处在列表中如果你喜欢)。但是,是的,这通常是如何处理冲突的。 –