![](/img/trans.png)
[英]Compute hash of a substring given the hashes of all prefixes of the string
[英]Merge of String hashes into master hash
兩個String對象的哈希值合並是否應該與其串聯的哈希值相同? 我正在使用XOR ^運算符(如此處所示 ),得到了不同的結果。
我做錯了什么?
String a = "A";
String b = "B";
String ab = a+b;
int i = a.hashCode() ^ b.hashCode();
System.out.println(
a.hashCode()+"\n"+
b.hashCode()+"\n"+
ab.hashCode()+"\n"
i);
問題的前提是錯誤的。 hashCode()
的唯一硬性要求是兩個相等的對象(即,調用a.equals(b)
返回true
)具有相等的哈希碼(即a.hashCode() == b.hashCode()
返回true
。
實際上,通過閱讀String#hashCode()
的javadoc ,狀態為:
字符串對象的哈希碼計算為
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int算術,其中s [i]是字符串的第i個字符,n是字符串的長度,^表示冪。 (空字符串的哈希值為零。)
很明顯,將兩個字符串混為一談將不會導致其哈希碼等於構成它的字符串的哈希碼的異或。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.