详谈 equals(),hashCode(),compareTo() 方法
三者很重要。
Java 编程中经常会对对象进行排列(equals() 方法,compareTo() 方法对排列相当重要,而 equals() 方法也要与 hashCode() 方法保持一直),也会经常使用 HashMap(hashCode() 方法对 HashMap 存储数据相当重要,良好的设计能提高哈希表的性能, hashCode() 方法要与 equals() 方法保持一致)。
compareTo() 方法:
通常使用 Comparable 或者 Comparator 进行排列,而使用 Comparable 接口进行排序的方式中,决定先后顺序的就是 compareTo() 方法,但是为了设计良好,也要设计出合适的 compareTo() 的方法,下面列出要求:
1,comparaTo(obj) 返回 0 的情况下,equals(obj) 需要返回 true;
2,确保如果 y.compareTo(x) 抛出异常,x.compareTo(y) 也要抛出异常;
3,e.compareTo(null) 会抛出 NPE;
4,实现类确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0;
5,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z)),注:符号 sgn(expression) 指定 signum 数学函数,该函数根据 expression 的值是负数、零还是正数,分别返回 -1、0 或 1 中的一个值。
hashCode() 方法的要求:
1,返回值需一致,那就要确保相应的成员属性不被修改;
2,如果根据 equals() 方法,两个对象相等,那么,这两个对象的 hashCode() 方法的返回值需要相等;
3,为了提高哈希表的性能,不相等的对象,调用hashCode() 方法应该返回不相等的值,那就意味着,根据 equals() 方法,两个对象不相等,那这两个对象调用hashCode() 方法应该返回不相等的值;
以上。
浙公网安备 33010602011771号