首先來看一下string中hashcode方法的實現原始碼
1在string類中有個私有例項欄位hash表示該串的雜湊值,在第一次呼叫hashcode方法時,字串的雜湊值被計算並且賦值給hash欄位,之後再呼叫hashcode方法便可以直接取hash欄位返回。public
inthashcode()
9 hash =h;10}
11return
h;12 }
string類中的hashcode計算方法還是比較簡單的,就是以31為權,每一位為字元的ascii值進行運算,用自然溢位來等效取模。
雜湊計算公式可以計為s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
s0+(s0*31+s1)+(s0*31^2+s1*31)+.....
關於為什麼取31為權,可以參考stackoverflow上的這個問題
主要是因為31是乙個奇質數,所以31*i=32*i-i=(i<<5)-i,這種位移與減法結合的計算相比一般的運算快很多。
字串雜湊可以做很多事情,通常是類似於字串判等,判回文之類的。
但是僅僅依賴於雜湊值來判斷其實是不嚴謹的,除非能夠保證不會有雜湊衝突,通常這一點很難做到。
就拿jdk中string類的雜湊方法來舉例,字串"gdejicbegh"與字串"hgebcijedg"具有相同的hashcode()返回值-801038016,並且它們具有reverse的關係。這個例子說明了用jdk中預設的hashcode方法判斷字串相等或者字串回文,都存在反例。
關於java中string類的用法!
string類代表字串 二,常用的操作方法 1,獲取某個位置的字串 在這裡插入 片 2.拼接兩個字串 在這裡插入 片 string str 王英傑 string str1 是女神 方式1 string ret str.concat str1 方式2 string ret str str1 syste...
JAVA中String類的總結
類在 的使用中有著非常重要的作用,現在對於 類做乙個總結 提到 類就不得不提到 類,有兩種型別的字串,一種是建立後不需要改變的,稱為字串常量,類用於儲存字串常量。另一種是建立後需要對其進行改變的,稱為字串變數,用於儲存字串變數。先來看看 類 類有 種構造方法,都是根據提供的不同引數來構造。下面舉幾個...
Java中的String類 二
2 string的常用操作方法 2.1 字元與字串 在string類中提供了以下的方法操作字元與字串間的轉換關係 根據字串中提供的索引找到指定位置的字元 public char charat int index 將字串變為字元陣列 public char tochararray 將字元陣列變為字串 ...