java小菜鸟请教一个逻辑与的问题!! 小弟无聊中研究了一下HasnMap的源代码,对下面这一段代码百思不得其解,望各位牛人指教static int indexFor(int h, int length) { return h & (length-1);//对此表达式的运算不甚理解! }Java源代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 根据当前key的哈希值,获取其value所在Entry数组的下标。这样的计算会非常迅速得到数组下标。 这个方法我没看懂,&是与运算比如00001110 等于1400001010 等于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数组中对应的存储位置。个人理解,如果有误,还望有人指出。 replaceAll方法 替换 ip的地址 什么叫框架啊 !!!!!! 请问为什么我的myeclipse上不能创建Spring框架啊?谢谢! applet显示问题 help! JTable的隐藏列的问题 (向初学者放血推荐)j2ee 初学者的福音,和斑竹一起“从零开始学j2ee”,jbuilder7+weblogic7 +sql2000 如何判断程序运行过程中内存消耗情况? 汉字比较问题 请问sohu股票行情java版的设计思路或者方法 请问国内用的最多的java编辑器是什么? java FTP下载,上传成功后如何提示问题(付代码) 包使用编译出错向高手请教
比如
00001110 等于14
00001010 等于10
结果:
00001010 等于10
所以14&10的结果就为0
化成二进制,同为1的为1
有0的结果为0
好像是大学里面学的,有点忘了,记得不是很清楚,有错误的话见谅
http://www.cnblogs.com/-clq/archive/2012/01/11/2318870.html
因为length一定是2的次方, 所以lenght - 1 的2进制一定是111111
也就是说 h & (length-1) = h % length
但是效率略高。
h & (length-1);
这里的&是一个求模(求余数)的运算,相当于%,整个表达式的意思就是key的hash值对hashmap中的table数组的长度求模,他这样做的目的是为了不越界,得到的值就是这个key在table数组中对应的存储位置。
个人理解,如果有误,还望有人指出。