我正在尝试实现一个通用的HashTable。 (这个问题是问题here)
的延续我已经修复了表格大小固定的情况下的通用哈希函数。但是,在实时情况下,使用HashTable是一个非常糟糕的主意,HashTable的大小最初固定为大约2 ^ 32位,因为它可能会导致大量内存浪费。
所以,我现在要做的是动态地增加hast表的大小,从一些初始值开始,只要它已经满了。
但是,当我这样做时,哈希函数现在会将新值返回到先前的哈希键。
除了使用新值散列值之前,还有什么办法可以解决这个问题。
答案 0 :(得分:0)
你无法避免重复:在哈希表中元素结束的存储桶的位置取决于你的冲突解决策略,取决于两件或三件事:
如果你改变这三个因素中的任何一个,你需要进行全面的重组:除非你做了一些非常糟糕的事情,比如选择一个非素数表大小,确定位置的hashCode % tableSize
表达式的值是更改tableSize
时会有所不同。在线性探测中散列到同一桶的元素的存在与否也将发生变化。这就是为什么你需要一个完整的重组。