【发布时间】:2015-12-01 19:47:38
【问题描述】:
我正在尝试使用散列函数实现布谷鸟散列: hash1: key.hashcode() % 容量 hash2: key.hashcode()/容量%容量
使用无限循环检查和重新散列方法使容量增加一倍。该程序适用于少量数据,但当数据变大(大约 20k 个元素)时,程序会不断重新散列,直到容量溢出。
我认为无限重新散列主要是由具有完全相同哈希码的数据引起的。重新散列后,其他数据有可能得到相同的哈希码并再次引起重新散列。
我已经使用 Java 内置哈希码,但是当数据量很大时,相同哈希码的机会仍然很高。即使我修改了一点hashcode方法,最终仍然有相同hashcode的数据。
那么我应该使用哪种哈希方法来防止这种情况发生?
【问题讨论】:
-
您确定您的数据元素是唯一的吗?
-
它们不是唯一的,但我确信存在的元素会在不插入的情况下得到处理。此外,我已经通过打印数据(在本例中为 String 类型)进行了检查。由不同的字符串导致的问题,但具有相同的哈希码。
-
好的,在这种情况下,使用自定义哈希函数。你的
capacity可以是什么? -
我做了一个自定义的,然后它仍然会遇到同样的问题,因为最终另一组数据使用 myHashCode 函数获得了相同的哈希码。我什至尝试将我的和内置的哈希码结合起来。还是行不通。我的能力可以是任何。我让它在每次重新散列时增长。
标签: java algorithm hash stack-overflow collision