早看到你的答案,就不琢磨了。
Java1.8-IdentityHashMap源码解析一. 概述 IdentityHashMap利用Hash表来实现Map接口,比较键(和值)时使用引用相等性代替对象相等性,也就是说使用 == 而不是使用 equals。 比...
早看到你的答案,就不琢磨了。
Java1.8-IdentityHashMap源码解析一. 概述 IdentityHashMap利用Hash表来实现Map接口,比较键(和值)时使用引用相等性代替对象相等性,也就是说使用 == 而不是使用 equals。 比...
((h << 1) - (h << 8)) & (length - 1)
h << 1: 左移,末位补0,偶数
h << 8: 同理,偶数
偶数减偶数,还是偶数,即二进制末位为0
0与任何数(0/1)相与还是0
即最后的结果,二进制末位是0,说明是偶数
h右移一位减 h 右移八位,二进制的最后一位肯定是0,lenth为2的倍数,length-1后,二进制的最后一位肯定是1 , 0 & 1 肯定等于 0 ,所以最后一位肯定是0,所以一定是个双数。
Java1.8-IdentityHashMap源码解析一. 概述 IdentityHashMap利用Hash表来实现Map接口,比较键(和值)时使用引用相等性代替对象相等性,也就是说使用 == 而不是使用 equals。 比...