hash()方法
hash函数的作用是使元素hash值更加发散,经过hash()处理之后,hash值的高16位没变,低16为原来的低16与高16异或的结果,即用16位来综合了高16位和低16位的影响,这样能提高key的发散性的主要原因是table的长度通常小于216 ,通过hash%table.length就能更发散
static final int hash(Object key) {
int h;
// h >>> 16即h右移16位
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
tableSizeFor()方法
由于HashMap的capacity都是2的次方数,因此这个方法用于找到大于等于initialCapacity的最小的2的幂(initialCapacity如果就是2的幂,则返回的还是这个数)
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
该博客探讨了Java中hash()方法的作用,它通过异或运算提高哈希值的发散性,确保在HashMap中键的分布更均匀。同时,介绍了tableSizeFor()方法,该方法用于确定HashMap的容量,确保容量始终为2的幂,从而优化哈希表的性能。
547

被折叠的 条评论
为什么被折叠?



