學習jdk源碼第一篇
首先來看HashMap用來計算key的hash值的函數
1 static final int hash(Object key) { 2 int h; 3 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 4 }
這里面使用了兩個java運算符:
無符號右移: >>>

小知識 >>是帶符號右移 >>>是無符號右移.. 帶符號右移就是將那個數轉為2進制然后在前面補0或1 如果是正數就補0 負數補1 例如11 >> 2,則是將數字11右移2位 計算過程: 11的二進制形式為:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后兩個數字移出,因為該數字是正數,所以在高位補零。則得到的最終結果是0000 0000 0000 0000 0000 0000 0000 0010。轉換為十進制是2。 無符號右移與帶符號右移的區別就是 無符號始終補0
異或:^
對應位相同為0,不同為1
使用key的hashcode,保留高16位,然后高16位和低16位做異或計算低16位。