1. 程式人生 > >hascode和equals為什麼要同時複寫—Java原始碼中的奧祕

hascode和equals為什麼要同時複寫—Java原始碼中的奧祕

    其實道理已經在上面標示彩色部分了 ,簡單翻譯一下: 在第12/70行的紅字部分要求我們在複寫equals方法的時候要複寫hashCode方法,其原因是要保護兩個方法之間的契約;這個契約就是當兩個物件equals的時候,其hashcode必然相等。(在hash演算法的資料結構中,兩個相同的物件可以放到相同的位置,和被相同的keyObj索引找到)也就是說這兩個方法彼此有個約定需要遵守,所以我們要按照約定同時複寫這兩個方法。同時注意到綠字部分,當兩個物件hashcode相同的時候,兩者不必然相等,這個是由於hash演算法決定的。我們應該盡力避免兩個不同的物件生成相同的hashcode,也就是避免hash衝突,從而提高依賴hashCode的資料結構的讀寫效能