HaspMap中的那个hash函数是干啥用的?
在HashMap中,在get和put(可能还有其他地方,没记那么多)的时候都对key的hashCode进行hash,返回一个hash然后进行添加或者get。具体是这样的:
int hash = hash(key.hashCode());
然后hash函数的实现是这样:
我把注释也贴出来了,因为就是看不懂注释,那些注释具体的是啥,英语实在太烂了。能举个例子说说最好了。
int hash = hash(key.hashCode());
然后hash函数的实现是这样:
/**
* Applies a supplemental hash function to a given hashCode, which
* defends against poor quality hash functions. This is critical
* because HashMap uses power-of-two length hash tables, that
* otherwise encounter collisions for hashCodes that do not differ
* in lower bits. Note: Null keys always map to hash 0, thus index 0.
*/
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
我把注释也贴出来了,因为就是看不懂注释,那些注释具体的是啥,英语实在太烂了。能举个例子说说最好了。
...全文


Java SE
