我有一個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