我正在閱讀Arrays.hashCode下面提供的代碼,public static int hashCode(Object a[]) { if (a == null) return 0; int result = 1; for (Object element : a) result = 31 * result + (element == null ? 0 : element.hashCode()); return result; }31我發現為什么選擇散列還不清楚。其次,element.hashCode()將我發送到Object定義它的類:@HotSpotIntrinsicCandidatepublic native int hashCode();element.hashCode()每次迭代如何計算?謝謝你。
1 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
來自《有效的 Java》一書:
選擇值 31 是因為它是一個奇數素數。如果它是偶數并且乘法溢出,則信息將丟失,因為乘以 2 相當于移位。使用素數的優勢不太明顯,但它是傳統的。31 的一個很好的特性是乘法可以用移位和減法代替以獲得更好的性能:31 * i == (i << 5) - i?,F代虛擬機自動進行這種優化。
添加回答
舉報
0/150
提交
取消