1. 程式人生 > >effectiveJava(7)覆蓋equals時總要覆蓋hashcode

effectiveJava(7)覆蓋equals時總要覆蓋hashcode

應用 作用 java cti object effective hashmap 產生 提高

在每個覆蓋了equals方法的類中,也必須要覆蓋hashcode方法。如果不這樣做的話,就會違反Object.hashcode的通用約定,從而導致該類無法結合所有基於散列的集合一起正常運作,這樣的集合包括HashMap、

HashSet、Hashtable.

  Object規範:

  在應用程序的執行期間,只要對象的equals方法的比較操作所作用到的信息沒有被修改,那麽對這同一對象調用多次,hashCode方法都必須返回同一個整數。在同一個應用程序的多次執行過程中,每次執行返回的整數可以不一致。

  如果兩個對象根據equals方法比較是相等的,那麽調用這兩個對象中任意一個對象的hashcode方法必須產生同樣的結果

  如果兩個對象根據equals方法比較是不相等的,那麽調用這兩個對象中任意一個對象的hashCode方法,則不一定要產生不同搞得整數結果。但是,給不相等的對象產生截然不同的整數結果,有可能提高散列列表的性能。

effectiveJava(7)覆蓋equals時總要覆蓋hashcode