【发布时间】:2013-12-18 23:41:17
【问题描述】:
我的问题不是关于双重哈希技术http://en.wikipedia.org/wiki/Double_hashing,这是一种解决冲突的方法。它是关于处理字符串哈希表中现有的冲突。说,我们有一个冲突:同一个桶中有几个字符串,所以现在我们必须通过桶检查字符串。计算另一个散列函数以进行快速字符串比较似乎是有意义的(比较散列值以快速拒绝)。哈希键可以延迟计算并与字符串一起保存。你用过这种技术吗?你能提供一个参考吗?如果不是,您是否认为由于性能增益值得怀疑而不值得这样做?一些注意事项:
- 我把标签“Java”,因为我在 Java 中进行测量: String.hashCode() 在大多数情况下优于 String.equals() (顺便说一句,大大优于手动哈希码计算:hashCode = 31 * hashCode + strInTable.charAt( i));
- 当然,对于任何字符串比较都可以提出同样的问题,不一定是哈希表中的字符串。但我正在考虑一种特殊情况,其中有大量字符串保存在哈希表中。
- 如果桶中的字符串有些相似(如在 Rabin-Karp 算法中),这可能是有意义的。在一般情况下寻求您的意见。
【问题讨论】:
-
这看起来高度依赖于上下文。我会做现实的测试用例并比较性能指标。
-
@Julius 同意。只是想先检查一下。也许我的问题没有意义:如果哈希码检查总是更快,那么 String.equals() 将使用它来实现。虽然大数据可以产生影响。
标签: java string hash collision