![]() |
1
135
通常散列不会求和,否则
你不会把它限制在前n个字符,因为否则house和houses会有相同的散列。 通常哈希值取一个值并乘以一个质数(使它更有可能生成唯一的哈希值),这样您就可以执行如下操作:
|
![]() |
2
127
如果是安全问题,可以使用Java加密:
|
![]() |
3
35
你应该用 String.hashCode() . 如果您真的想自己实现hashcode:
只使用前五个字符是 坏主意 . 想想层级名称,比如url:它们都有相同的散列代码(因为它们都以“http://”开头,这意味着它们存储在散列映射中的同一个bucket下,表现出糟糕的性能。 这是一个战争故事,它是从 Effective Java “:
|
![]() |
4
17
如果你用Java做这件事,那你为什么要这么做呢?只要打电话
|
![]() |
5
12
Guava's
|
![]() |
6
7
nick提供的这个函数很好,但是如果使用新的字符串(byte[]bytes)将转换为字符串,它将失败。你可以用这个函数来做。
也许这能帮上忙 |
![]() |
7
5
|
![]() |
8
4
|
![]() |
9
3
如果你想看看行业标准的实现,我会看看 java.security.MessageDigest . “消息摘要是安全的单向哈希函数,它接受任意大小的数据并输出固定长度的哈希值。” |
![]() |
10
2
sdbm:此算法是为sdbm(ndbm的公共域重新实现)数据库库创建的
|
![]() |
12
0
|
![]() |
13
0
这样可以避免任何碰撞,而且在计算中使用移位之前,速度会很快。
|
![]() |
14
-1
在为字符串开发一个好的hast函数时,使用奇数是一个好主意。这个函数接受一个字符串并返回一个索引值,到目前为止它的工作还不错。碰撞更少。指数范围在0-300之间,甚至可能更大,但我到目前为止还没有得到任何更高的指数,即使是用“机电工程”这样的长词。
另一件事,你可以做的是将int parse中的每个字符乘以索引,就像单词“bear”一样。 (0*b)+(1*e)+(2*a)+(3*r),这会给你一个int值。上面的第一个散列函数在“here”和“hear”处发生冲突,但仍然擅长给出一些好的惟一值。下面的一个不会与“here”和“hear”冲突,因为随着索引的增加,我会将每个字符与索引相乘。
|
![]() |
15
-1
这里有一个简单的哈希函数,我用它来创建一个哈希表。它的基本功能是获取文本文件并将每个单词存储在表示字母顺序的索引中。
这基本上是根据单词的第一个字母进行哈希运算。所以,以“a”开头的单词将得到0的散列键,“b”将得到1,依此类推,“z”将是25。数字和符号的散列键为26。这提供了一个优势;您可以方便快速地计算给定单词在哈希表中的索引位置,因为它都是按字母顺序排列的,如下所示: 代码可以在这里找到: https://github.com/abhijitcpatil/general
这将是输出:
|