equals
重写equals方法要遵循一下几个法则:
自反性 对称性 传递性 一致性(无论调用几次equals都不会改变结果) 非空性(所有对象不能为null)
实现高质量equals的几点
1.使用==操作先判断是否为同一对象的引用
2.使用instanceof判断类型
3.参数转化成正确类型(参数应该是Object类)
4.检查关键域是否匹配
5.检查对称性,传递性和一致性
6.覆盖equals总要覆盖hashcode,参数类型一定要为Object,不要让equals方法过于智能
hashcode
在计算equals方法之前,首先会调用hashcode方法将对象分桶,以下是hashcode方法的约定
1.hashcode对同一对象的计算值永远相等
2.两个对象equals返回true,那么他们的hashcode必然相等
3.hashcode相等,不一定equals。单位了提高散列的效率,应尽量让他们不相等
不要试图通过排除掉关键域的方式来提高散列效率,也不要加入非关键域
注:像HashMap HashSet这样的集合,会通过hashcode来判断对象是否相等,所以如果hashcode编写不当,集合会出错
Comparator接口与Comparable接口的区别
http://www.cnblogs.com/szlbm/p/5504634.html
Comparable是内部比较器 提供的方法是 int compareTo(T t)
Comparator是外部比较器 提供的方法是 int compare(T t1, T t2)