小弟无聊中研究了一下HasnMap的源代码,对下面这一段代码百思不得其解,望各位牛人指教
static int indexFor(int h, int length) {
        return h & (length-1);//对此表达式的运算不甚理解!
    }
Java源代码

解决方案 »

  1.   

    根据当前key的哈希值,获取其value所在Entry数组的下标。这样的计算会非常迅速得到数组下标。
      

  2.   

    这个方法我没看懂,&是与运算
    比如
    00001110    等于14
    00001010    等于10
    结果:
    00001010    等于10
    所以14&10的结果就为0
    化成二进制,同为1的为1
    有0的结果为0
    好像是大学里面学的,有点忘了,记得不是很清楚,有错误的话见谅
      

  3.   

    &是与运算符,return h & (length-1);意思是将h和(length-1)先转换成二进制,然后进行与计算,转换成二进制位数少的前面补上0,然后同1的为1,其它为0,得到的结果再转换成十进制返回。
      

  4.   

    我帮楼主查了下该函数的功能,4楼说的对,功能是根据当前key的哈希值,获取其value所在Entry数组的下标。网址如下。
    http://www.cnblogs.com/-clq/archive/2012/01/11/2318870.html
      

  5.   

    获取下标的功能
    因为length一定是2的次方, 所以lenght - 1 的2进制一定是111111
    也就是说 h & (length-1) = h % length 
    但是效率略高。
      

  6.   

    就是用key的hash值与数组长度组合一种运算 保证返回的值不超过length就可以 没什么太特别的意义
      

  7.   

    首先感谢下楼主,让我重新对hashmap研读了一把。然后说下对你问题的理解:
     h & (length-1);
    这里的&是一个求模(求余数)的运算,相当于%,整个表达式的意思就是key的hash值对hashmap中的table数组的长度求模,他这样做的目的是为了不越界,得到的值就是这个key在table数组中对应的存储位置。
    个人理解,如果有误,还望有人指出。