如何生成String的长哈希?

时间:2012-02-16 10:34:57

标签: java string hash long-integer

我有一个java applciation,我想在其中为字符串生成long个ID(为了在neo4j中存储这些字符串)。为了避免数据重复,我想为存储在long整数中的每个字符串生成一个id,对于每个字符串应该是唯一的。我怎么能这样做?

4 个答案:

答案 0 :(得分:11)

此代码将计算相当不错的哈希:

String s = "some string";
long hash = UUID.nameUUIDFromBytes(s.getBytes()).getMostSignificantBits();

答案 1 :(得分:7)

为什么不查看String的hashcode()函数,只是采用它来代替长值?

顺便说一下。如果有办法为每个String创建一个唯一的ID,那么你会找到一个压缩算法,它能够将每个String打包成8个字节(根据定义不可能)。

答案 2 :(得分:5)

long有64位。长度为9的String具有72位。来自pigeon hole principle - 您无法获得9个字符长字符串到long的唯一哈希值。

如果您仍想要long哈希:您可以为String->inthash1()hash2()采用两个标准[不同!]哈希函数并计算:{{ 1}}

答案 3 :(得分:1)

有很多答案,请尝试以下方法:

或者,如前所述,查看来源。

PS。另一种技术是维护一个字符串字典:由于你不太可能很快得到2个 64 字符串,你可以拥有完美的映射。请注意,映射可能也成为主要瓶颈。