參考地址:淺談Java中的hashcode方法
hashCoed
是Object
類裏面的方法,返回值是一個物件的雜湊碼
方法:
@Override
public int hashCode() {
return super.hashCode();
}
public int hashCode() {
throw new RuntimeException("Stub!");
}
沒有具體實現是因爲這是本地方法。
本地方法 --> 就是用關鍵字native
修飾的方法,通過這些方法可以呼叫java以外的程式,例如c語言寫的程式
Native具體方法:Java語言中Object物件的hashCode()取值的底層演算法是怎樣實現的?,object hashcode
具體實現講解跳轉到–>Java中hashCode的實現
有些朋友誤以爲預設情況下,hashCode返回的就是物件的儲存地址,事實上這種看法是不全面的,確實有些JVM在實現時是直接返回物件的儲存地址,但是大多時候並不是這樣,只能說可能儲存地址有一定關聯。
equals
的作用是比較物件(地址)
equals
比較相等,hashCode
肯定相等;hashCode
比較相等,equals
不一定相等。
如果equals
比較的結果是兩個物件地址相同,那麼他們的值肯定是相等的。他們的值相等時,同一個JVM上,雜湊值肯定相等。
雜湊值相等的兩個物件地址一定相等嗎?不見得。因爲雜湊值是通過特定演算法計算出來滴。可能兩個物件的值算出相同的雜湊值,也可能算出不同的雜湊值。
我們知道了雜湊值是什麼東西了,或者怎麼實現滴,那麼:
舉個栗子:
有十個人,你想知道小明在不在裏面,可以用For回圈來實現。(List實現)
也可以用雜湊值,將十個人的人名在存入的時候,存入雜湊值,以雜湊值爲KEY,即可快速知道,小明存不存在其中。(HashMap實現)
支援此方法是爲了提高雜湊表(例如 java.util.Hashtable
提供的雜湊表)的效能。