我正在完成Hashmap的实现,并在下面的代码中找到了计算哈希码的代码。能否请您解释一下如何计算h的值以及为什么以这种特定方式完成?
final int hash(Object k) {
int h = hashSeed;
if (0 != h && k instanceof String) {
return sun.misc.Hashing.stringHash32((String) k);
}
h ^= k.hashCode();
// 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);
}
答案 0 :(得分:1)
这是一种确保每个对象的哈希码是唯一的方法,创建种子进行一些操作以找到唯一键,并且该键将存储在地图中。
如您所知,将地图商店信息作为对键值。然后该方法最重要的一行是
h ^= k.hashCode();
您需要确保在代码中,如果决定覆盖hashCode()方法,即按对象返回唯一代码/ id,或者您可以覆盖同一映射中的不同对象。
我希望这能澄清一点你的怀疑
答案 1 :(得分:1)
.radio-item {
display: inline-block;
position: relative;
padding: 0 6px;
margin: 10px 0 0;
}
.radio-item input[type='radio'] {
display: none;
}
.radio-item label {
color: #666;
font-weight: normal;
}
.radio-item label:before {
content: " ";
display: inline-block;
position: relative;
top: 5px;
margin: 0 5px 0 0;
width: 20px;
height: 20px;
border-radius: 11px;
border: 2px solid #004c97;
background-color: transparent;
}
.radio-item input[type=radio]:checked + label:after {
border-radius: 11px;
width: 16px;
height: 16px;
position: absolute;
top: 9px;
left: 10px;
content: " ";
display: block;
background: #004c97;
}
函数计算 Hashcode
。你必须先研究这个功能。
计算哈希码后的原因是使用下面的
再次重新哈希hashCode()
是为了避免进一步的碰撞。
找到原文
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
参见评论。