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()方法的返回值相等。