重写equals方法时必须重写hashcode方法吗
重写equals方法时必须重写hashcode
有规范:
1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode()
2,当obj1.equals(obj2) 为 false 时,obj1.hashCode() != obj2.hashCode()
原因:
如果只重写了equals方法,
出现了问题,两个对象equals方法比较为true,但是hashcode值不相等,违背了规范。
hashmap中存储数据时,先调用hashCode,唯一则存储,不唯一则再调用equals,结果相同则不再存储,结果不同则散列到其他位置。
如果我们将对象的equals方法重写而不重写hashcode,当我们再次new一个新的对象的时候,equals方法返回的是true,但是hashCode方法返回的就不一样了,如果需要将这些对象存储到结合中(比如:Set,Map …)的时候就违背了原有集合的原则
总结:
1、两个对象,用==比较比较的是地址,需采用equals方法(可根据需求重写)比较
Object类源码:
public boolean equals(Object obj) {return (this == obj);}
2,重写equals()方法就重写hashCode()方法。
3,一般相等的对象都规定有相同的hashCode。
4,String类重写了equals和hashCode方法,比较的是值。
5,重写hashcode方法为了将数据存入HashSet/HashMap/Hashtable(可以参考源码有助于理解)类时进行比较
重写equals方法时必须重写hashcode方法吗相关推荐
- 为什么重写equals方法时必须重写hashcode方法
文章目录 1. == 与 equals的区别 2. 重写equals() 3. 为什么重写equals方法时必须重写hashcode方法? 3.1 Hash算法 3.2 HashCode() 相关文章 ...
- 为什么重写equals()就一定要重写hashCode()方法
Object类,所有类的父类 一.为什么重写equals()方法一定要重写hashCode()方法 1.首先解释equals方法和hashcode方法分别是用来干什么的? equals()方法: 在O ...
- [改善Java代码]覆写equals方法必须覆写hashCode方法
覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...
- java -为什么重写equals(),还需要重写hashCode()?
1.先post这两个方法的基本定义: equals()的定义: 浅谈Java中的equals和==(转) hashCode()的定义: java中hashCode()方法的作用 Java中hashCo ...
- java 重写equals的要点_重写equals 方法的注意事项
java.lang.Object 中的equals方法如下 public boolean equals(Object obj) { return (this == obj); } 什么时候需要重写eq ...
- 面试官:重写 equals 时为什么一定要重写 hashCode?
作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 重要说明:本篇为博主<面试题精选-基础篇>系列中的一篇,关注 ...
- 为什么重写equals方法时,要求必须重写hashCode方法?
1 equals方法 Object类中默认的实现方式是 : return this == obj .那就是说,只有this 和 obj引用同一个对象,才会返回true. 而我们往往需要用equ ...
- JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...
- JAVA中list.contains()方法,要重写equals(),hashcode()方法
今天动力节点java培训机构小编为大家介绍"JAVA中list.contains()方法,要重写equals(),hashcode()方法",希望能够帮助正在学习java的零基础学 ...
最新文章
- DOM渲染的详细过程
- [HNOI2011]数学作业 分段矩阵乘法
- 笔记: 环境 - Postgre从安装到使用
- 21 RadioGroup ListFragment
- Java案例:编译器生成桥方法
- 数据结构与算法python—8.递归及leetcode总结
- adb.exe可能被其他程序关闭_苹果说关闭后台 反而会缩短电池寿命?!
- Atitit 数据库 负载均衡 方法总结 目录 1. 对称模型负载均衡 vs 非对称模型	2 1.1. 业务分离法	2 1.2. App + db分布式分离法	2 2. 负载均衡算法	2 2.1.
- C#多线程之线程同步篇2
- php seek_cur,Golang中seek使用方法详解
- 安全左中右·2022 XDR 网络安全运营新理念峰会圆满落幕
- Ubuntu学习NO5.高效工作方式
- Flink之DataSet转换操作(二)
- 百度云上传本地图片到对象存储BOS——python版
- 阴阳师夜刀神技能是什么
- 在网吧想免费上网又何不自己动动手呢?
- jquery停止全部音频播放
- 【运筹学】对偶理论 : 影子价格 ( 对偶问题的经济解释 )
- win10如何调整计算机时间同步,win10系统调整设置时间同步的频率的操作方法
- Java极简角色权限后台管理框架springboot manager
热门文章
- Uploadify v3.2.1
- 解决mysqlAccess denied for user'root'@'IP地址'问题
- 练习PYTHON之EPOLL
- SpringMVC下的基本配置
- 二分搜索 POJ 3273 Monthly Expense
- Android中进程间通讯 AIDL
- django模板中使用JQ代码实现瀑布流显示效果
- 一文读懂TOF深度相机技术原理--TI-Tintin-OPT8241二次开发和应用系列--Theory Level
- c#listView
- [bzoj2324][ZJOI2011]营救皮卡丘