您的位置:首页 > 其它

对所有对象都通用的方法

2016-05-07 22:41 281 查看
一、覆盖equals时请遵循通用的约定
1、自反性:对象必选等于自身
2、对称性:a.equals(b) 与b.equals(a)结果一致,实例如下
A:"ABc"  B:"abc"
A.equals(B) => true(不区分大小写)
B.equals(A) => false(区分大小写)
3、传递性:保证a.equals(b),b.equals(c),a.equals(c)
4、一致性:如果两个对象相等,它们就必须始终保持相等。
5、非空性:所有的对象都必选不等于null
结论:
(1)想要使用好equals方法,即逻辑相等,就必选遵循好以上的5条准则。
(2)没有特殊的业务需求一般不推荐覆盖equals方法

二、覆盖equals时总要覆盖hashCode
1、Object的hashCode方法是一个native方法,具体实现在jvm中,这也就意味着native实现形式是可能是多种多样的。

public native int hashCode();

2、hashCode的作用:
(1)当两个对象的hashcode一样时,两个对象就有可能一样。如果不一样的话两个对象就肯定不一样。
(2)hashMap与hashSet中就使用了hashCode

3、Hashtable、HashMap和HashSet的区别
(1)Hashtable,数据单元结构为键值对的形式,保证了线程安全,具体实现是在操作table数据的相关方法(如put、remove、contains等)前加入synchronized

(2)HashMap,数据单元结构为键值对的形式,非线程安全,相比Hashtable效率更高
(3)HashSet,数据单元结构为单值形式,非线程安全,具体实现依赖于HashMap。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: