假设我有一个不可变的类,并编写了一个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;
}
关于在何种情况下使用哈希表,我的想法如下:
- 如果哈希表或字典的键(key)是必须要使用的。
- 如果该哈希表在其生命周期内有许多查找操作。
GetHashCode
占用了大量时间时。 - porgesint hash = IntValue;
来简化第一行。在Java中,String.hashCode()已经被缓存了,所以在这种情况下可能没有你想象的那么有价值。 - Peter Lawrey