大家都知道equals()
相同時hashcode
必須相同 但是hashcode
相同並不一定eqauls
但是具體的例子還真沒看過 我們可以看到string 的hashcode()
方法如下
public int hashcode
() this.hash = var1;
}return var1;
}複製**
這裡我用我的姓的拼音來演示下馬(ma)
在ascii表中我們可以找到m
和a
和編碼分別是77
66
這樣算的就是(31*0+77)*31+66
資料有點少看不出來規律 再加上我的名林(lin)
76
69
110
這樣算起來就是
((((31*0+77)*31+66)*31+76)*31+69)*31+110
複製**
這樣我們就可以總結出來規律啦
31*31(n-1)+str.charat(0)*31(n-2)+str.charat(1)*31(n-3)+...+str.charat(n-1)
複製**
其中的(n-*)代表根次方
這樣我們就可以看出來了 如果構造相鄰倆個最後的和一樣 我們設比較的兩個字串的編碼形式為(x1)(y1)和(x2)(y2)他們倆只有中間倆個字元的編碼不一樣 那麼怎麼分別設定這兩個字串才能讓他們的編碼最後相同呢 經過一番高考之前的我附身 我們可以得到以下的等式
最最重要的是
(x1-x2)*31=(y2-y1)
複製**
也就是相鄰的兩位如果前邊的編碼差 1 後邊的兩個的編碼就要差-31*1
倆個例項吧 還是上邊的我的大姓ma有哪個字串是和m(77)a(97)
hashcode相同的呢 其中乙個結果竟然為nb(敲黑板)n(78)b(66)
看起來我們這個姓比較厲害了
equals和hashcode的重寫
下面給出例項 package xuming class student public student string name,int age,int classnum 重寫equals方法 public boolean equals object o 測試引用o是都為null if o null 測...
equals 和hashCode 的區別
equals 反映的是或變數具體的值,即兩個物件包含的值 可能是物件的引用,也可能是值型別的值 hashcode 計算出物件例項的雜湊碼 根據記憶體位址返回的int型的數值 並返回雜湊碼,又稱為雜湊函式。根據object的hashcode都是唯一的 當然,當物件重寫了hashcode 方法時,結果就...
hashCode 和equals 的區別
hashcode 和equals 都是object類中的方法 hashcode equals 不重寫時 返回的是物件的位址值 用來比較兩個物件的位址值是否相等 重寫後返回的是根據物件的成員變數,計算出的乙個整數 比較的是兩個物件的成員資訊是否相同 兩個物件通過equals 比較是相等的,那hashc...