为了账号安全,请及时绑定邮箱和手机立即绑定

字符串的良好哈希函数

字符串的良好哈希函数

慕斯709654 2019-08-15 16:00:09
字符串的良好哈希函数我正在尝试为字符串设想一个好的哈希函数。而且我认为总结字符串中前五个字符的unicode值可能是一个好主意(假设它有五个,否则在它结束时停止)。这是一个好主意,还是一个坏主意?我在Java中这样做,但我不认为这会产生很大的不同。
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

通常哈希不会做算术,否则stoppots将具有相同的哈希值。

并且你不会将它限制在前n个字符,因为否则房屋和房屋将具有相同的哈希值。

通常,散列取值并乘以素数(使其更有可能生成唯一的散列)所以你可以这样做:

int hash = 7;for (int i = 0; i < strlen; i++) {
    hash = hash*31 + charAt(i);}


查看完整回答
反对 回复 2019-08-15
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您应该使用String.hashCode()

如果你真的想自己实现hashCode:

不要试图从哈希码计算中排除对象的重要部分以提高性能 - Joshua Bloch,Effective Java

仅使用前五个字符是个坏主意。考虑层次名称,例如URL:它们都将具有相同的哈希码(因为它们都以“http://”开头,这意味着它们存储在哈希映射中的同一个桶中,表现出糟糕的性能。

这是一篇关于来自“ Effective Java ” 的String hashCode的战争故事:

在1.2之前的所有版本中实现的String散列函数检查最多16个字符,在整个字符串中均匀分布,从第一个字符开始。对于大型分层名称集合(例如URL),此哈希函数显示可怕的行为。


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 343 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信