欢迎光临
我们一直在努力

hashmap hash值计算,python计算hash值

计算hash值的方法:

对于key的hashCode做hash操作,无符号右移16位然后做异或运算。
还有平方取中法,伪随机数法和取余数法。这三种效率都比较低。而无符号右移16位异或运算效率是最高的。
集合中的初始化容量(必须是二的n次幂)

//默认的初始容量是16 — 1<<4相当于1*2的4次方—1*16static final int DEFAULT_INITIAL_CAPACITY 便宜香港vps = 1 << 4; static final int hash(Object key) { int h; /* 1)如果key等于null: 可以看到当key等于null的时候也是有哈希值的,返回的是0. 2)如果key不等于null: 首先计算出key的hashCode赋值给h,然后与h无符号右移16位后的二进制进行按位异或得到最后的hash值 */ return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }

计算过程如下所示:

说明:1)key.hashCode();返回散列值也就是hashcode。假设随便生成的一个值。2)n表示数组初始化的长度是163)&(按位与运算):运算规则:相同的二进制数位上,都是1的时候,结果为1,否则为零。 4)^(按位异或运算):运算规则:相同的二进制数位上,数字相同,结果为0,不同为1。

简单来说就是:

高16 bit 不变,低16 bit 和高16 bit 做了一个异或(得到的 hashcode 转化为32位二进制,前16位和后16位低16 bit和高16 bit做了一个异或)(n-1) & hash = -> 得到下标 (n-1) n表示数组长度16,n-1就是15取余数本质是不断做除法,把剩余的数减去,运算效率要比位运算低。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。