哈希表中的下限/上限载荷因子

时间:2014-05-02 19:43:37

标签: java hashtable load-factor

我要在java中编写一个链式哈希集类。

我理解负载系数是M /容量,其中M是表中当前元素的数量,容量是表的大小。

但是负载因子如何帮助我确定是否应该调整表格并重新调整? 此外,我无法找到任何地方如何计算下/上负载因子。他们甚至需要吗?

我希望这是足够的信息, 谢谢!!

2 个答案:

答案 0 :(得分:1)

用于配置标准Java哈希(以及其他语言中的多个哈希API)的单个loadFactor是一种简化。

从概念上讲,distingush是合理的

  • 目标负载,表示默认的内存占用 - 性能权衡配置。当您构建已知大小的哈希时,您可以选择容量,以便大小/容量尽可能接近目标负载。

  • 最大负载,您希望哈希永远不会超过此负载。如果哈希达到此负载,则触发调整大小。

  • 增长因子,这是在调整大小时放大哈希值的默认配置。如果容量是2的幂,则增长因子可能只有2或4。

  • 最小负载,您希望散列加载永远不会低于最小负载,可能除非您删除元素或清除哈希。如果容量是2的幂,则最小负载不能大于0.5。此外,最大载荷/最小载荷比应大于或等于生长因子。

以上所有关注链接哈希,对于使用墓碑的开放式寻址哈希事情变得更加复杂。

java.util.HashMap loadFactor中同时扮演目标和最大加载的角色。增长系数为2,最小负载为0.0。

对于链式散列非2次幂容量是过度杀伤,除非你需要极其精确控制内存使用(你不要相信我)或2 ^ 30之间的容量和2 ^ 31-1(因为你不能在Java中创建一个大小为2 ^ 31的数组,它是Integer.MAX_VALUE + 1)。

答案 1 :(得分:0)

它反过来说:它并不是负载因素对你有帮助;您明确根据您的性能测试确定负载因子,以避免浪费时间重新散列并仍具有可接受的检索和迭代性能。