• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
酒醒梦断
博客园    首页    新随笔    联系   管理    订阅  订阅

关于equals相等则hashcode必须相等的总结

如果你的class永远不可能放在hash code为基础的容器内作为KEY,不必劳神,您真的不必override hashCode()

 

 

 

 

 

所以可以通过重写equals()方法来判断对象的值是否相等,但是有一个要求:equals()方法实现了等价关系,即:

自反性:对于任何非空引用x,x.equals(x)应该返回true;
对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true;
传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true;
一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果;
非空性:对于任意非空引用x,x.equals(null)应该返回false;


*
* hashmap hashtable
* 至于HashSet,实际上它只是忽略value的HashMap,每次HashSet.add(o)其实就是HashMap.put(o, dummyObject)。
*
*
*
如果不重写hashcode()方法的话就会在数组不同下标的链表下存在相同的对象(equals相等) 如在存储散列集合时(如Set类),将会存储了两个值一样的对象,导致混淆,因此,就也需要重写hashcode()



put方法如果指定的KEY已经有值再次put会把old的替换掉。

Associates the specified value with the specified key in this map.
If the map previously contained a mapping for the key, the old value is replaced.

 

 

posted @ 2018-01-02 12:32  酒醒梦断  阅读(2090)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3