l HashSet:如果集合中對象所屬的類重新定義了equals()方法,那么這個類也必須重新定義hashCode()方法,并且保證當兩個對象用equals()方法比較的結果為true時,這兩個對象的hashCode()方法的返回值相等。
l TreeSet:如果對集合中的對象進行自然排序,要求對象所屬的類實現Comparable接口,并且保證這個類的compareTo()和equals()方法采用相同的比較規則來比較兩個對象是否相等。
l HashMap:如果集合中鍵對象所屬的類重新定義了equals()方法,那么這個類也必須重新定義hashCode()方法,并且保證當兩個鍵對象用equals()方法比較的結果為true時,這兩個鍵對象的hashCode()方法的返回值相等。
l TreeMap:如果對集合中的鍵對象進行自然排序,要求鍵對象所屬的類實現Comparable接口,并且保證這個類的compareTo()和equals()方法采用相同的比較規則來比較兩個對象是否相等。
由此可見,為了使應用程序更加健壯,在編寫JAVA類時不妨養這樣的編程習慣:
l 如果JAVA類重新定義了equals()方法,那么這個類也必須重新定義hashCode()方法,并且保證當兩個對象用equals()方法比較的結果為true時,這兩個對象的hashCode()方法的返回值相等。
l 如果JAVA類實現了Comparable接口,那么應該重新定義compareTo(),equals()和hashCode()方法,保證compareTo()和equals()方法采用相同的比較規則來比較兩個對象是否相等,并且保證當兩個對象用equals()方法比較的結果為true時,這兩個對象的hashCode()方法的返回值相等。