Java 如何生成字符串的长哈希?

Java 如何生成字符串的长哈希?,java,string,hash,long-integer,Java,String,Hash,Long Integer,我有一个java应用程序,我想在其中为字符串生成longID(以便将这些字符串存储在中)。为了避免数据重复,我想为存储在long整数中的每个字符串生成一个id,该id对于每个字符串都应该是唯一的。我该怎么做呢?你为什么不看看String的hashcode()函数,然后改为使用长值呢 顺便说一句。如果有一种方法可以为每个字符串创建唯一的ID,那么您就会找到一种压缩算法,可以将每个字符串打包成8个字节(根据定义不可能)。有很多答案,请尝试以下方法: http://stackoverflow.com

我有一个java应用程序,我想在其中为字符串生成
long
ID(以便将这些字符串存储在中)。为了避免数据重复,我想为存储在
long
整数中的每个字符串生成一个id,该id对于每个字符串都应该是唯一的。我该怎么做呢?

你为什么不看看String的
hashcode()
函数,然后改为使用长值呢


顺便说一句。如果有一种方法可以为每个字符串创建唯一的ID,那么您就会找到一种压缩算法,可以将每个字符串打包成8个字节(根据定义不可能)。

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

  • http://stackoverflow.com/questions/415953/generate-md5-hash-in-java 编辑:删除,我错过了
    long
    要求。我有罪
或者,如前所述,查看来源


另外一个技巧是维护字符串字典:因为你不太可能很快得到264个字符串,所以你可以拥有完美的映射。但请注意,这种映射也可能成为一个主要瓶颈。

long
有64位。长度为9的
字符串有72位。from-无法将9个字符长的字符串的唯一哈希值设置为
长的


如果您仍然想要一个
long
hash:您可以为
String->int
hash1()
hash2()
使用两个标准[不同的!]hash函数,并计算:
hash=2^32*hash1+hash2
此代码将计算出非常好的hash:

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

在存储到neo之前,你不能得到字符串的散列并将其强制转换为long吗?你不能实现“所有字符串的唯一性”-long有64位,长度为9的字符串有72位,必须有一些字符串将散列到相同的long,你无法获得唯一性,因为有无限多的字符串,只有有限多的长字符串。你能更具体地描述一下你在寻找什么吗?碰撞的百分比是多少?它使用md5,我不确定登录的百分比只是为了更新投票。也许不是最正确的,但很实用