equals()和hashcode()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了equals()和hashcode()相关的知识,希望对你有一定的参考价值。

默认调用的情况:

1.集合在存放对象时,首先判断hashcode(),再判断equals如果都是true,认为是相同的两个元素不进行存储。

   删除对象时,将从hashcode指定位置查找再删除

 

2.在hashSet集合中的对象如果改变了对象的hashCode值将导致无法查找到以及无法删除集合中的对象,可能导致内存泄漏;

技术分享

因此以对象hashcode值作为定位的方式需要特别注意;

 

3.对象的hashcode值必须满足一致性:即多次调用其值用来定位的时候都必须相同(比如对象存放和查找的时候)

4.相同对象的hashcode是相等的;

重写hashcode的场景:
当需要认为多个对象某些值相同就是同一个对象的时候;譬如多个对象有些认为是相同的存放到集合中要排除掉

同时还需要重写equals()

 

以上是关于equals()和hashcode()的主要内容,如果未能解决你的问题,请参考以下文章

谈谈HashSet的存储原理及为什么重写equals必须重写hashcode方法

在java中,关于equals(),和hashCode()的重写问题。

详解为什么需要重写hashcode 和 equals 方法

详解为什么需要重写hashcode 和 equals 方法

equals和HashCode深入理解以及Hash算法原理

JAVA中重写equals方法为啥要重写hashcode方法说明