原文:hashmap的hash方法为什么需要让高16位参与异或运算的原因

原因:当数组的长度很短时,只有低位数的hashcode值能参与运算。而让高 位参与运算可以更好的均匀散列,减少碰撞,进一步降低hash冲突的几率。并且使得高 位和低 位的信息都被保留了。 而在这里采用异或运算而不采用 amp , 运算的原因是 异或运算能更好的保留各部分的特征,如果采用 amp 运算计算出来的值的二进制会向 靠拢,采用 运算计算出来的值的二进制会向 靠拢 然后有不少博客提到了因为i ...

2021-01-04 05:15 0 2395 推荐指数:

查看详情

为什么要先16位异或低16再取模运算

我们知道,n代表的是table的长度length,之前一再强调,表table的长度需要取2的整数次幂,就是为了这里等价这里进行取模运算时的方便——取模运算转化成运算公式:a%(2^n) 等价于 a&(2^n-1),而&操作比%操作具有更高的效率。  当length=2n时 ...

Fri May 17 09:25:00 CST 2019 0 979
运算运算

运算有三个特性: 0和任何数字或永远等于该数字,0^4=4 两个相同的数字或等于0,2^2=0 或满足交换律和结合律,例如a^b=b^a,(a^b)^c=a^(b^c) 所以在一个数组中,除了一个数字只出现过一次,而其他数字都出现过两次,则求解该数组中只出现过一次 ...

Sun Sep 26 06:18:00 CST 2021 0 109
运算(按位与、按位或、或)

按位与运算符(&) 参加运算的两个数,按二进制进行“与”运算运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算) 即 0 & 0= 0 ,0 & ...

Tue Jul 30 18:43:00 CST 2019 0 2078
运算(按位与、按位或、或)

按位与运算符(&)参加运算的两个数,按二进制进行“与”运算运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。例:3 & ...

Fri Dec 06 22:23:00 CST 2019 0 3791
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM