我們有一個非重要的標籤,其值是一個字符串。我們想檢查標籤值的變化。但是我們不希望進行字符串比較,因爲這涉及到客戶端 - 服務器,而是我們想要爲字符串計算某種類型的值,並使用該值幫助檢測字符串更改。由於字符串不重要,我們想知道是否有一個非常簡單快速的解決方案來計算這個值,以幫助檢測字符串的變化。有沒有辦法快速計算字符串的簽名以幫助檢測字符串更改?
回答
使用.hashCode()
String.hashCode()
是不完美的,因爲它是有損耗的。所以有可能字符串可能會改變,它會有相同的哈希碼。 (但這不會經常發生)幾乎每次字符串更改時,其哈希碼也會改變。
所以,你知道你要成什麼樣,爲String.hashCode()
代碼是這樣的:
public int hashCode() {
int h = hash; // the cached hash value
int len = count; // the number of characters in the string
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
它會經常發生。 'int'只有32位寬。 –
所以1/2^32往往是? –
是的。 http://preshing.com/wp-content/uploads/2011/05/probability-distribution.png –
是。但是如果你需要唯一性,不要使用哈希碼。使用SHA256摘要。
String tag = "...";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(text.getBytes("UTF-8"));
byte[] digest = md.digest();
我想我不明白爲什麼字符串比較是不必要的,但字節數組比較會好嗎? –
尺寸我猜...我也歡迎關於此問題的澄清問題。 –
- 1. 有沒有辦法從cmd字符串複製字符串?
- 2. 字符串修改幫助
- 3. AnyObject以快速字符串
- 4. 計算速度字符串
- 5. 有沒有更好的方法來計算C#中的字符串中的字符串格式佔位符?
- 6. PHP字符串:有沒有辦法來計算的字符串前面的空格?
- 7. 有沒有辦法從字符串中刪除字符? Java
- 8. C#字符串類:沒有辦法將字符推到字符串的末尾?
- 9. 有沒有辦法檢查一個C#字符串的編碼?
- 10. 有沒有辦法在JSONPath中獲取字符串值的子字符串?
- 11. 有沒有辦法在C#中訪問字符串數組中的字符串?
- 12. 有沒有辦法通過字符串傳遞包含'+'的查詢字符串
- 13. 有沒有辦法根據字符串測試一個int? (Java)
- 14. 沒有輸出計算字符串字符的代碼
- 15. 有沒有更快的方法來寫這個字符串
- 16. 有沒有辦法將表名指定爲字符串?
- 17. Groovy方法「沒有簽名」字符串參數和字符串返回
- 18. 快速檢查字符串的guid值
- 19. 有沒有辦法使用格式字符串來分割字符串?
- 20. MATLAB - 有沒有辦法做一個字符串中使用多個字符串
- 21. 計算字符串的所有子字符串並檢查給定條件的最快方法
- 22. 快速字符檢測
- 23. 用於在字符串中搜索子字符串的快速算法
- 24. 有沒有辦法檢測字母數字Unicode符號?
- 25. 有沒有辦法在android中計算字符串高度/重量?
- 26. 有沒有辦法恢復簽名的字符串可以訪問簽名和私鑰?
- 27. 朱莉婭錯誤:沒有一種方法haskey(快譯通{字符串,快譯通{字符串,字符串}},ASCIIString)
- 28. 的Java:字符串:有沒有更好的方法來比較字符串
- 29. 幫助數字簽名散列(SHA1)字符串
- 30. 有沒有辦法從GCC獲取字符串文字?
string.hashcode()? (散列碼衝突的風險較低) – assylias