Data structures 使用素数表示哈希表的大小

Data structures 使用素数表示哈希表的大小,data-structures,hash,hashtable,Data Structures,Hash,Hashtable,我一直在阅读我的关于哈希表的教科书,它说在重新设置哈希表时使用一个素数作为数组的大小,但是它没有解释为什么。我也在谷歌上搜索过,我找到的最好的答案是“出于技术原因”,关于为什么素数应该用于哈希表的大小,这些原因是什么?这取决于哈希函数。具体地说,为哈希表大小选择一个素数可以补偿使用的哈希函数很差的事实,并且通常会返回在执行过程中自然同时出现的值的同余哈希。哈希表大小的素数提高了哈希函数可能具有的任何“周期”与哈希表大小相对素数的概率 如果使用一个优秀的散列函数,比如加密散列函数,您可以使用任意大

我一直在阅读我的关于哈希表的教科书,它说在重新设置哈希表时使用一个素数作为数组的大小,但是它没有解释为什么。我也在谷歌上搜索过,我找到的最好的答案是“出于技术原因”,关于为什么素数应该用于哈希表的大小,这些原因是什么?

这取决于哈希函数。具体地说,为哈希表大小选择一个素数可以补偿使用的哈希函数很差的事实,并且通常会返回在执行过程中自然同时出现的值的同余哈希。哈希表大小的素数提高了哈希函数可能具有的任何“周期”与哈希表大小相对素数的概率


如果使用一个优秀的散列函数,比如加密散列函数,您可以使用任意大小的散列表而不用担心。二的幂是便宜的,因为除法变成了位掩码。

我读到在java hashmap中,大小是二的幂,这是因为它有帮助 元素在阵列上的均匀分布。我认为使用素数也是为了避免冲突和平均分配元素。Bucket索引决定为hashcode%arraysize, 现在,如果大小是任意的复合数,那么碰撞的可能性就更大