如何生成String的长哈希?

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

long有64位。 长度为9的String有72位。 从鸽子洞的原则 – 你不能得到一个独特的哈希9长字符long

如果你仍然想要一个long哈希:你可以为hash1() String->inthash1()hash2()获取两个标准的[不同!]哈希函数并计算: hash(s) = 2^32* hash1(s) + hash2(s)

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

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

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

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

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

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

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