标签:c java hash theory performance
鉴于我有一个不可变的类,其中已经编写了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;
}
我对可能明智的情况的看法是:
>如果它打算成为地图或字典的关键字.
>如果所述地图在其生命周期内将有许多查找.
解决方法:
您的点“1”仅定义何时应实现GetHashCode()(以及匹配的等于) – 在这种情况下,您应该(“2”)期望它被查询适度的次数.但是,这里的关键是分析,或预先存在的场景知识.例如,如果你的哈希实际上是对一个大型内部数组进行哈希,那么它可能值得缓存.在这种情况下,我会懒惰地缓存它(可能作为一个int?),除非我知道它将被用作一个键(总是),在这种情况下我可能会急切地预先计算它.
但是,在大多数情况下,每次都只需按需计算.
标签:c,java,hash,theory,performance 来源: https://codeday.me/bug/20190626/1294867.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。