如果我的密钥集为1000,那么我的哈希表的大小是多少,这是如何确定的?
答案 0 :(得分:9)
它取决于加载因子(表中将增加其大小并重新分配其元素的“满%”点)。如果您知道您有1000个条目,并且该数字永远不会更改,您可以将加载因子设置为1.0,将初始大小设置为1000以获得最大效率。如果您不确定确切的大小,可以将负载系数保留为默认值0.75,并将真正良好性能的初始大小设置为1334(预期大小/ LF),但需要付出代价额外的记忆。
您可以使用以下构造函数来设置加载因子:
Hashtable(int initialCapacity, float loadFactor)
答案 1 :(得分:3)
您还需要考虑哈希函数。
一条经验法则建议使表格大小加倍,以便有扩展空间,并希望保持较小的碰撞次数。
另一个经验法则是假设您正在进行某种与模数相关的散列,然后将表格大小舍入到下一个最大素数,并使用该素数作为模数值。
你有什么样的东西?更多细节应该会产生更好的建议。
答案 2 :(得分:1)
答案 3 :(得分:1)
让它成长。有了这个尺寸,自动处理就可以了。除此之外,2 x size + 1是一个简单的公式。素数也很好,但是一旦你的数据集达到一定的大小,哈希实现就可能决定重新整理和扩展表。
你的钥匙正在推动效果,并且希望足够明显。
结论:当你遇到大小或性能缓慢等问题时询问尺寸问题,除此之外:别担心!
答案 4 :(得分:0)
两次很好。
您没有大的密钥集。 不要为有关HashTable实现的困难讨论而烦恼,而是去参加2000年。
答案 5 :(得分:0)
我想重申https://stackoverflow.com/users/33229/wwwflickrcomphotosrene-germany上面所说的内容。 1000对我来说似乎不是一个很大的哈希。我在java中使用了很多关于这个大小的哈希表而没有看到很多性能问题。我几乎没有考虑尺寸或负载因素。
如果你在代码上运行了一个分析器,并确定哈希表是你的问题,那么一定要开始调整。否则,在你确定之前我不会认为你有问题。
毕竟,在大多数代码中,性能问题并非您认为的那样。我尽量不要期待。