關於Java中String類的hashCode方法

2021-08-16 22:14:41 字數 793 閱讀 3292

首先來看一下string中hashcode方法的實現原始碼

1

public

inthashcode()

9 hash =h;10}

11return

h;12 }

在string類中有個私有例項欄位hash表示該串的雜湊值,在第一次呼叫hashcode方法時,字串的雜湊值被計算並且賦值給hash欄位,之後再呼叫hashcode方法便可以直接取hash欄位返回。

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 將字元陣列變為字串 ...