读书人

HashMap hash步骤分析

发布时间: 2012-10-24 14:15:58 作者: rapoo

HashMap hash方法分析

HashMap 中hash table 定位算法:

?HashMap hash步骤分析HashMap hash步骤分析
    ?HashMap hash步骤分析HashMap hash步骤分析
      ?HashMap hash步骤分析HashMap hash步骤分析


        得到i=15

        其中h^(h>>>7)^(h>>>4) 结果中的位运行标识是把h>>>7 换成 h>>>8来看。

        即最后h^(h>>>8)^(h>>>4) 运算后hashCode值每位数值如下:
        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
        结果中的1、2、3三位出现重复位^运算
        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)的算法,应该是考虑1、2、3三位出现重复位^运算的情况。使得最低位上原hashCode的8位都参与了^运算,所以在table.length为默认值16的情况下面,hashCode任意位的变化基本都能反应到最终hash table 定位算法中,这种情况下只有原hashCode第3位高1位变化不会反应到结果中,即:0x7FFFF7FF的i=15。

读书人网 >编程

热点推荐