关于equals()我就不过多赘述,大体就是判断两个对象是否相等,关于equals()与==的用法如果感兴趣的话,可以看看我的这篇博客:https://blog.csdn.net/qq_52002412/article/details/124508558,新人博主,写的不好的地方还请多多包涵。
1.2 hashCode()-
hashCode()的作用是返回散列码(也被称为哈希码),他返回一个整数,这个整数用来判断该对象在散列表中的下标。
-
hashCode()被定义在Object类中,Object是所有类的超类,这就意味着每一个类都拥有该方法。
-
hashCode()只有再创建某个类的散列表(如HashMap)的时候才有用。
举个栗子来说明一下hashCode()的用处:
比如说我们向一个HashMap
重点不在这里,想要了解更多的细节的同学,可以看看HashMap的底层源码。
1.3 图示HashMap的原理在这里稍微提一下HashMap大概的数据结构,这样会对我们更好的理解后面的内容。如图
2.equals()与hashCode()的联系如果我们自己创建了一个类,并且重写了这个类的equals()方法,一般IDE会建议我们顺便重写一下hashCode()方法。
而两个方法是否有关系呢?
我们要分情况讨论。
2.1 不会创建某个类的散列表如果不会创建某个类的散列表,那么equals()与hashCode()一点关系没有。真的真的我不骗你。
2.2 会创建某个类的散列表如果创建某个类的散列表的话,那么加入这个类的对象加入散列表时,程序首先会通过hashCode()得到这个类的哈希码,然后通过除余或者是其他的方式得到该对象在散列表中的下标。然后在以该下标为头结点的链表中,如果不存在其他节点,那么这个对象直接加入这个链表中,如果存在其他节点,那么就会使用equals()方法来判断这个链表中是否存在与之相等的“值”,存在则不加入,不存在则加入。
上我们可以总结出:
- 如果两个对象hashCode()相等,它们并不一定相等。
- 如果两个对象相等,那么它们的hashCode()值一定相同。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)