我有一个java应用程序,我想在其中为字符串生成long
标识符(为了将这些字符串存储在neo4j中)。为了避免数据重复,我想为存储在long
整数中的每个字符串生成一个id,对于每个字符串应该是唯一的。我怎样才能做到这一点 ?如何生成一个字符串的长散列?
5
A
回答
4
long
具有64位。长度为9的String
有72位。从pigeon hole principle - 你不能得到一个独特的散列,9字符长字符串到long
。
如果你还想要一个long
哈希:你可以只取两个标准[不同!]的哈希函数String->int
,hash1()
和hash2()
,并计算:hash(s) = 2^32* hash1(s) + hash2(s)
6
为什么你不看一下String的hashcode()
函数,只是采用它来代替long值?
Btw。如果有一种方法可以为每个字符串创建一个唯一的ID,那么您将找到一种压缩算法,可以将每个字符串打包为8个字节(按定义不可能)。
1
有很多答案,请尝试以下操作:
http://stackoverflow.com/questions/415953/generate-md5-hash-in-java编辑:删除,我已经错过了long
要求。 Mea culpa。- http://en.wikipedia.org/wiki/Perfect_hash_function
或者,正如之前所说,检查出的来源。
PS。还有一种技术是维护一个字符串字典:因为你不可能很快得到字符串,所以你可以有完美的映射。但请注意,映射也可能成为主要瓶颈。
5
该代码将计算相当好的哈希:
String s = "some string";
long hash = UUID.nameUUIDFromBytes(s.getBytes()).getMostSignificantBits();
相关问题
- 1. 生成MD5散列字符串T-SQL
- 2. 生成一个字符串的随机固定长度排列
- 3. LM散列,散列一个长于14个字符的密码
- 4. 从长字符串生成序列号
- 5. PHP - 从一个整数生成一个8字符的散列
- 6. 如何将一个字符串分成长度为3的字符串列表?
- 7. 如何从长度为28的两个唯一字符串中生成长度为28的唯一字符串?
- 8. 如何为一个字符串的不同排列生成一个唯一的散列?
- 9. 生成一个字符串
- 10. 如何“成长”一个字符串到想要的长度
- 11. 是否可以使用字符串#crypt生成更长的散列值?
- 12. 给定一个字符串列表,创建一个长度和字符串的散列表
- 13. 如何生成唯一的字符串
- 14. 如何生成oracle字符串序列?
- 15. resteasy,jaxb - 如何生成一个集合/字符串列表?
- 16. 如何在连接2个字符串后快速生成新的字符串散列
- 17. 如何根据给定的字符和长度生成一个排列列表?
- 18. 如何在C中创建一个字符串的md5散列?
- 19. 生成依赖于字符串散列的随机数
- 20. 如何从字符串集合中生成一个唯一的字符串?
- 21. 如何从字符串列表中生成字符串组合?
- 22. 生成带有m个可能字符的字符串列表(n长度)
- 23. 我想找到一个散列函数生成散列与给定长度
- 24. 如何生成唯一字符串?
- 25. Rails将选项散列成字符串
- 26. 生成列表字符串
- 27. 如何修复Winform C#中字符串生成器字符串的长度?
- 28. 如何生成符合一个特定的字符串
- 29. 生成一个新的字符串
- 30. 如何构造一个长字符串
难道你不能只是得到字符串的散列,并将它们存储在neo之前很长时间? – Marthin 2012-02-16 10:38:15
您无法实现“对所有字符串唯一” - 长度为64位,长度为9的字符串为72位,必须有一些字符串将被散列到相同长度 – amit 2012-02-16 10:38:28
您无法获得唯一性,因为存在无限多的字符串,只有有限的多字符。你能更具体地描述你在找什么吗? – templatetypedef 2012-02-16 10:39:07