为什么JavaString哈希乘数选择31? 31是奇素数(可以充分利用原始数据包含的信息) 哈希分布比较均匀。偶数的冲突率很高,只有少数例外。小乘数(1-20)的冲突率也很高 哈希计算很快。选用31是JVM的一种优化。位移和减法操作比乘法操作快速 31*hash=(hash<<5)-hash; 31和33的计算速度和哈希分布基本一致,整体表现好(大于31,33的奇数虽然效果也不错,但是31和33的移位是最少的,理论上是最快的) hashtable中索引的位置计算为什么是0X7FFFFFFF 返回