Hash表大小使用质数的原因
素数可以有效的减少hash冲突
设Hash表大小为size,并且size是一个合数,即size = a * n。当关键字key = b * n时,他们有公因子n。
有Hash公式:
hashcode = key%size = key - (key / size) * size = key - (b/a) * size
因为a和size都是不变的,所以hashcode只有b种可能,这样显然会增加冲突的概率。所以当一个关键字集合里的所有关键字都与Hash表大小有公因数n时,那么hashcode只有key/n种可能。