1. 程式人生 > >覆蓋equals時總要覆蓋hashCode

覆蓋equals時總要覆蓋hashCode

覆蓋 方法 優化 equal 出現問題 相等 equals() 一個 相同

Object條約規定:相等的對象必須具有相同的散列碼hashCode

假如將只覆蓋equals方法,沒覆蓋hashCode方法的類用於HashMap中,將會出現問題,會出現get()方法返回時不是同一個對象

這就相當於將對象put進一個散列桶,卻在另一個散列桶get這個對象,就算剛好是put和get都在同一個散列桶中,get方法也必定會返回null,這是因為HashMap做了優化,只要是hashCode的值不相同時就不再判斷對象是否相同。

所以在覆蓋equals()方法時總要覆蓋hashCode()方法。

覆蓋equals時總要覆蓋hashCode