对所有对象都通用的方法
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。
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。
相关文章推荐
- SSO单点登录
- ZOJ 3946 Highway Project 贪心+最短路
- 更新条目时出错
- 存储班长信息的学生类
- 学习PS基础教程
- js基础01
- c++实验5-数组选择
- CSharpGL(22)实现顺序无关的半透明渲染(Order-Independent-Transparency)
- Linux防火墙iptables简明教程
- Mybatis入门程序
- Python 时间处理函数
- linux网卡绑定 网卡bond
- 你很有可能在滥用Docker
- 部分js代码
- Supervised Descent Method and its Applications to Face Alignment
- 动态规划—Problem E
- Vulkan学习资料汇总(持续更新)
- 1、fragment的使用封装(上)
- 20150307+Linux2+vi操作快捷键-02
- #码神心得_01# 第一次来码神