【发布时间】:2011-10-18 00:07:42
【问题描述】:
鉴于我有一个不可变类,其中编写了 GetHashCode() 函数,我怎么知道缓存哈希结果是否有益,或者在大多数情况下这样做是否明智?
考虑到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;
}
我对可能明智的情况的看法是:
- 如果它打算作为地图或字典的键。
- 如果所述地图在其生命周期内将进行多次查找。
【问题讨论】:
-
当分析显示
GetHashCode占用了大量时间。 -
第 1 点)似乎无关紧要。点 2) 应在分析器中显示。
-
您可以使用
int hash = IntValue;String.hashCode() 在 Java 中简化第一行,因此在这种情况下可能没有您想象的那么多价值。 -
谢谢你们的cmets,我可能先发制人地提出了这个问题,希望同行们对这个问题有想法。
标签: c# java performance hash theory