HashMap与HashTable的区别与联系

2023-01-02  本文已影响0人  spark打酱油

1.HashMap与HashTable相同点

2.HashMap与HashTable区别

static final int hash(Object key) {
 int h;
 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

注意:这里计算hash值,先调用hashCode方法计算出来一个hash值,再将hash与右移16位后相异或(异或计算方式:相同为0,不相同为1,可以理解为不进位相加),从而得到新的hash值。

例子:

十进制:3254818
注意:int类型 占4byte 32位
处理数据
二进制:11 0001 1010 1010 0010 0010 (22位,不足32位,则补0到32位)
0000 0000 0011 0001 1010 1010 0010 0010 (32位)
h>>>16 无符号右移16位
0000 0000 0000 0000 0000 0000 0011 0001
^ 异或操作:相同为0,不相同为1,可以理解为不进位相加
数据处理完毕,开始进行异或操作
h = key.hashCode() ^ (h >>> 16)
0000 0000 0011 0001 1010 1010 0010 0010 ( h = key.hashCode())
^ (异或)
0000 0000 0000 0000 0000 0000 0011 0001 (h >>> 16)
结果为:
0000 0000 0011 0001 1010 1010 0001 0011
3245803 (十进制结果)

②:Hashtable通过计算key的hashCode()来得到hash值就为最终hash值。

上一篇下一篇

猜你喜欢

热点阅读