HashMap之key的hash函數


學習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
View Code

異或:^

對應位相同為0,不同為1

使用key的hashcode,保留高16位,然后高16位和低16位做異或計算低16位。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM