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

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

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

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

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

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

从概念上讲,distingush是合理的

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

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

  • 增长因子 ,在resize时放大哈希值的默认配置。 如果容量是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)。

它的作用相反:负载因素并不能帮助你; 您可以根据性能测试明确决定负载因子,以避免浪费时间重复,并且仍然具有可接受的检索和迭代性能。