在Java中检查并在网上搜索散列表的代码示例,似乎调整表格大小是通过加倍来完成的。
但大多数教科书都说最好的表格大小是质数。
所以我的问题是:
加倍的方法是因为:
- 实现容易,还是
- 寻找质数太低效了(但我认为通过
n+=2
找到下一个质数,并使用模运算测试素性的时间复杂度是O(loglogN),这很便宜),或者 - 这是我的误解,只有某些哈希表变量需要使用质数表大小?
更新:
教科书中提出的使用质数的方式是必须的,以确保某些属性可以工作(例如,二次探测需要一个质数大小的表来证明例如如果表不满项X将被插入)。
发布的重复链接通常询问增加任何百分比,例如25%或下一个质数,所接受的答案说明我们加倍是为了使调整大小操作“罕见”,以便我们可以保证平摊时间。
这并没有回答拥有质数大小的表格大小,并使用比加倍更大的质数进行调整大小的问题。 因此,想要保留质数大小的属性,同时考虑调整大小开销。