当前位置:编程学习 > JAVA >>

java小菜鸟请教一个逻辑与的问题!!

小弟无聊中研究了一下HasnMap的源代码,对下面这一段代码百思不得其解,望各位牛人指教
static int indexFor(int h, int length) {
        return h & (length-1);//对此表达式的运算不甚理解!
    }
Java 源代码 --------------------编程问答-------------------- 顶起来啊,俺也求解! --------------------编程问答-------------------- 这个好不常规啊 --------------------编程问答-------------------- indexFor是什么功能的函数 --------------------编程问答-------------------- 根据当前key的哈希值,获取其value所在Entry数组的下标。

这样的计算会非常迅速得到数组下标。 --------------------编程问答-------------------- 这个方法我没看懂,&是与运算
比如
00001110    等于14
00001010    等于10
结果:
00001010    等于10
所以14&10的结果就为0
化成二进制,同为1的为1
有0的结果为0
好像是大学里面学的,有点忘了,记得不是很清楚,有错误的话见谅 --------------------编程问答-------------------- &是与运算符,return h & (length-1);意思是将h和(length-1)先转换成二进制,然后进行与计算,转换成二进制位数少的前面补上0,然后同1的为1,其它为0,得到的结果再转换成十进制返回。 --------------------编程问答-------------------- 我帮楼主查了下该函数的功能,4楼说的对,功能是根据当前key的哈希值,获取其value所在Entry数组的下标。网址如下。
http://www.cnblogs.com/-clq/archive/2012/01/11/2318870.html --------------------编程问答-------------------- 获取下标的功能
因为length一定是2的次方, 所以lenght - 1 的2进制一定是111111
也就是说 h & (length-1) = h % length 
但是效率略高。 --------------------编程问答-------------------- 就是用key的hash值与数组长度组合一种运算 保证返回的值不超过length就可以 没什么太特别的意义 --------------------编程问答-------------------- 首先感谢下楼主,让我重新对hashmap研读了一把。然后说下对你问题的理解:
 h & (length-1);
这里的&是一个求模(求余数)的运算,相当于%,整个表达式的意思就是key的hash值对hashmap中的table数组的长度求模,他这样做的目的是为了不越界,得到的值就是这个key在table数组中对应的存储位置。
个人理解,如果有误,还望有人指出。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,