我有一个java applciation,我想在其中为字符串生成long
个ID(为了在neo4j中存储这些字符串)。为了避免数据重复,我想为存储在long
整数中的每个字符串生成一个id,对于每个字符串应该是唯一的。我怎么能这样做?
答案 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->int
,hash1()
和hash2()
采用两个标准[不同!]哈希函数并计算:{{ 1}}
答案 3 :(得分:1)
有很多答案,请尝试以下方法:
long
的要求。 Mea culpa。或者,如前所述,查看来源。
PS。另一种技术是维护一个字符串字典:由于你不太可能很快得到2个 64 字符串,你可以拥有完美的映射。请注意,映射可能也成为主要瓶颈。