如果我的密钥集为1000,那么我的哈希表的大小是多少,这是如何确定的?

有帮助吗?

解决方案

它取决于加载因子(表中将增加其大小并重新分配其元素的“完整百分比”点)。如果您知道您有1000个条目,并且该数字永远不会更改,您可以将加载因子设置为1.0,将初始大小设置为1000以获得最大效率。如果您不确定确切的大小,可以将负载系数保留为默认值0.75,并将真正良好性能的初始大小设置为1334(预期大小/ LF),但需要付出代价额外的记忆。

您可以使用以下构造函数来设置加载因子:

Hashtable(int initialCapacity, float loadFactor) 

其他提示

您还需要考虑哈希函数。

一条经验法则建议使表格大小加倍,以便有扩展空间,并希望保持较小的碰撞次数。

另一个经验法则是假设您正在进行某种与模数相关的散列,然后将表格大小舍入到下一个最大素数,并使用该素数作为模数值。

你有什么样的东西?更多细节应该会产生更好的建议。

让它成长。有了这个尺寸,自动处理就可以了。除此之外,2 x size + 1是一个简单的公式。素数也很好,但是一旦你的数据集达到一定的大小,哈希实现就可能决定重新整理和扩展表。

你的钥匙正在推动效果,并且希望足够明显。

结论:当你遇到大小或性能缓慢等问题时询问尺寸问题,除此之外:别担心!

两次很好。

您没有大的密钥集。 不要为有关HashTable实现的困难讨论而烦恼,而是去参加2000年。

我想重申 https://stackoverflow.com/users/33229/wwwflickrcomphotosrene-germany上面说。 1000对我来说似乎不是一个很大的哈希。我在java中使用了很多关于这个大小的哈希表而没有看到很多性能问题。我几乎没有考虑尺寸或负载因素。

如果你在代码上运行了一个分析器,并确定哈希表是你的问题,那么一定要开始调整。否则,在你确定之前我不会认为你有问题。

毕竟,在大多数代码中,性能问题并非您认为的那样。我尽量不要期待。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top