我一直在阅读关于HashTables的教科书,它说在重新编写数据时使用素数作为数组的大小,但它没有解释原因。我也用Google搜索过,我发现的最佳答案是“出于技术原因”,这些原因是什么原因为什么素数应该用于HashTable的大小?
答案 0 :(得分:3)
这取决于哈希函数。具体来说,为哈希表大小选择素数可以弥补所使用的哈希函数较差的事实,并且通常会返回在执行期间自然一起出现的值的全等哈希值。散列表大小的素数可以提高散列函数的任何“周期”与散列表大小相对素数的可能性。
如果使用优秀的散列函数,例如加密散列函数,则可以毫无顾虑地使用任何散列表大小。 2的幂是便宜的,因为划分成为位掩码。
答案 1 :(得分:0)
我已经读过java hashmap的大小是2的幂,这是因为它有帮助 在数组上平等分布元素。我认为使用素数也是为了避免碰撞和平均分配元素。 Bucket索引被确定为hashcode%arraysize, 现在,如果size是任何复合数,那么碰撞的可能性就会更大。