我正在尝试以正确的方式进行哈希处理(我承认,依靠自动魔术管理,我通常在这里可能有点草率)。我认为我已经控制住了它,但是我不确定这是否是完全正确的方法,或者是否缺少某些内容(是的,我已经阅读了很多页面,但仍然...)。
在我的课堂上,我设计了这样的东西。我Segment
有意省略了定义,因为我认为我的方法是正确的而不知道。
public class Compound
{
public Segment PartA { get; set; }
public Segment PartB { get; set; }
...
public int GetHashCode()
{
return PartA.GetHashCode() * PartB.GetHashCode()
}
}
该方法似乎是安全的,因为整数不会溢出,而是环绕最大值。对我而言,这种方法的优势在于,这两个部分实际上都会影响所产生的哈希。
我想知道在计算时是否应该使用乘法或加法(或完全其他的方法)。我实际上从两个部分的哈希中都得到了什么吗?我说不清楚。
是的,这使得如果你想哈希值予以确定SENCE都 PartA
和PartB
。在一般情况下,可能是这样的:
public int GetHashCode()
{
// hash must not throw exceptions; check for null:
if (null == PartA)
return null == PartB ? 0 : PartB.GetHashCode();
else if (null == PartB)
return PartA.GetHashCode();
// XOR ^ is a better choice: no integer overflow and no bias
return PartA.GetHashCode() ^ PartB.GetHashCode();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句