你是不是还在懵逼为什么IDEA的Alt+Insert把equals方法和hashCode()绑在了一起,
你是不是存在着许多的问号呢???
先记住:如果两个对象queals()相等hashCode()一定相等,hashCode()相等,两个对象可能不相等。
新手村先简单了解一下HashMap(高手请往下翻):HashMap的put操作通过得到key的hash值后进行一系列骚操作后添加HashMap(数组+链表+红黑树)的数据结构中,出现hash值一样时,产生哈希碰撞,碰撞后,比较equals()方法,如果一样进行更新,否则进行添加。
我们来看一下以下几种情况,你的问号可能就瞬间消失了。
1.两个对象queals()相等hashCode()一定相等
str3和str4在逻辑上相等,所以当put(str4)时,str3的值进行更新了,这大致就跟我们预想的一样了吧。
2.hashCode()相等,两个对象可能不相等
str5和str6两个对象都添加成功,也跟我们预想的一样不发生冲突。
3.重写equals(),不重写hashCode()
创建Str对象类
很显然,在str3、str4在我们逻辑上看来是相等的,可是put进去后却不会发生更新操作,而是进行添加操作,对我们来讲是不是有点不符合我们的逻辑了吧。
所有,重写queals方法后,我们也要保证同个对象的hashCode也要相等。
其实,对于我们只是单纯比较两个对象的是否相同并不使用到hash值计算时,重写queals方法并不一定要hashcode方法,只是代码有风险,还需要谨慎。
最后最后,再来安利一遍:两个对象queals()相等hashCode()一定相等,hashCode()相等,两个对象可能不相等。
刚开始写文章,可能写的不是很好,有问题的可以直接指出来,让我们一起学习一起进步。