【发布时间】:2019-03-18 05:04:53
【问题描述】:
我正在实现一个哈希映射来包含一个单词文件中的所有单词(例如dictionary.txt、bible.txt)并且我遇到了碰撞问题。我知道那里有很多很好的哈希函数,但是当我尝试使用这个压缩函数压缩哈希码时,冲突的数量会显着增加(我使用dbj2 作为我的哈希函数)。
我的 hashmap 基本上将一个键转换为其哈希值,并将该哈希值压缩为内部哈希表中条目的索引,这是一个数组。如果达到0.5 的load factor,它会将自身调整为2 * capacity - 1。当发生冲突时,我的 hashmap 会使用二次探测生成新的索引。
这是我当前的压缩函数的样子:
private int compress(int hashCode) {
return Math.abs(hashCode) % capacity;
}
有什么(有效的)方法可以避免碰撞吗?改变 hashmap 本身的结构也是可以接受的。
【问题讨论】:
-
没有充分的理由发生大量冲突,除非您的哈希算法很差。请向我们展示更多代码。在这种情况下,
Math.abs()也可能不会像您认为的那样做。阅读文档。
标签: java hash hashmap hash-collision