鉴于我有一个不可变类,其中已编写GetHashCode()
函数,我如何知道缓存哈希结果是否有益,或者在大多数情况下这样做是否明智?< / p>
考虑到GetHashCode()
计算的性能已经针对基元和字符串值进行了优化,是否应该考虑一下?
我的典型GetHashCode()
可能如下所示:
//C#
public override int GetHashCode() {
int hash = 13;
hash = 13 * hash + IntValue;
hash = 13 * hash + (StringValue1 == null ? 0 : StringValue1.GetHashCode());
hash = 13 * hash + (StringValue2 == null ? 0 : StringValue2.GetHashCode());
return hash;
}
我对可能明智的情况的看法是:
答案 0 :(得分:4)
您的观点“1”仅定义何时应实施GetHashCode()
(以及匹配的Equals
) - 在这种情况下,您应该(“2”)期望查询适度次。但是,这里的关键是分析,或预先存在的场景知识。例如,如果您的哈希实际上是在大型内部数组上进行哈希,那么它可能值得缓存。在这种情况下,我会懒得缓存它(可能是int?
),除非我知道要用作键(总是),在这种情况下我可能会预先计算热切地说。
但在大多数情况下,每次都只需按需计算。