久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

HashMap hash方法分析

 桑枯海 2013-09-19
HashMap 中hash table 定位算法:
Java代碼  收藏代碼
  1. int hash = hash(key.hashCode());  
  2. int i = indexFor(hash, table.length);  

其中indexFor和hash源碼如下:
Java代碼  收藏代碼
  1. /** 
  2.  * Applies a supplemental hash function to a given hashCode, which 
  3.  * defends against poor quality hash functions.  This is critical 
  4.  * because HashMap uses power-of-two length hash tables, that 
  5.  * otherwise encounter collisions for hashCodes that do not differ 
  6.  * in lower bits. Note: Null keys always map to hash 0, thus index 0. 
  7.  */  
  8. static int hash(int h) {  
  9.     // This function ensures that hashCodes that differ only by  
  10.     // constant multiples at each bit position have a bounded  
  11.     // number of collisions (approximately 8 at default load factor).  
  12.     h ^= (h >>> 20) ^ (h >>> 12);  
  13.     return h ^ (h >>> 7) ^ (h >>> 4);  
  14. }  
  15.   
  16. /** 
  17.  * Returns index for hash code h. 
  18.  */  
  19. static int indexFor(int h, int length) {  
  20.     return h & (length-1);  
  21. }  

indexFor這個方法論壇中已有人分析過,,這里就不再分析,。
現(xiàn)在分析一下hash算法:
Java代碼  收藏代碼
  1. h ^= (h >>> 20) ^ (h >>> 12);  
  2. return h ^ (h >>> 7) ^ (h >>> 4);  

假設(shè)key.hashCode()的值為:0x7FFFFFFF,table.length為默認值16,。
上面算法執(zhí)行如下:



得到i=15

其中h^(h>>>7)^(h>>>4) 結(jié)果中的位運行標識是把h>>>7 換成 h>>>8來看,。

即最后h^(h>>>8)^(h>>>4) 運算后hashCode值每位數(shù)值如下:
8=8
7=7^8
6=6^7^8
5=5^8^7^6
4=4^7^6^5^8
3=3^8^6^5^8^4^7
2=2^7^5^4^7^3^8^6
1=1^6^4^3^8^6^2^7^5
結(jié)果中的1、2,、3三位出現(xiàn)重復(fù)位^運算
3=3^8^6^5^8^4^7     ->   3^6^5^4^7
2=2^7^5^4^7^3^8^6   ->   2^5^4^3^8^6
1=1^6^4^3^8^6^2^7^5 ->   1^4^3^8^2^7^5

算法中是采用(h>>>7)而不是(h>>>8)的算法,,應(yīng)該是考慮1、2,、3三位出現(xiàn)重復(fù)位^運算的情況,。使得最低位上原h(huán)ashCode的8位都參與了^運算,所以在table.length為默認值16的情況下面,,hashCode任意位的變化基本都能反應(yīng)到最終hash table 定位算法中,,這種情況下只有原h(huán)ashCode第3位高1位變化不會反應(yīng)到結(jié)果中,,即:0x7FFFF7FF的i=15。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多