hashCode()和equals()

2021-3-20

1.作用

hashCode()方法和equal()方法作用,都是为了比较两个对象是否相等一至。

2.区别

(1)equals()相等的两个对象,他们的hashCode()一定相等

(2)hashCode()相等的两个对象,equals()不一定相等

3.需要进行大量快速的对比时如何解决?

每次做对比前,首先用hashCode()去对比,如果hashCode()比较结果不等,则equals值一定不等,就不用比较了,如果hashCode()比较结果相等,再接着比较equals(),如果两次结果都相等,则这两个对象就相同,否则不同。

注意:hashCode的使用在于提高散列结构存储中查找的效率,但在线性表中没有作用。

4.为什么重写equals()后,还要重写hashCode()?

hashCode()和equals()都是基本类Object的方法,如果不重写返回的只是当前对象的地址。

基于上述,比较相同的一个类,new两个对象,他们的内存地址不同,hashCode()也不同,显然这不是我们需要的结果。

所以为了满足一个类,再hashCode()里面返回唯一的一个hash值,需要重写hashCode()。

举例:

String,Integer等这种内部类都重写了这两个方法

HashSet的内比较,比较相同的一个类,new两个对象,重写equals()后,没重写hashCode(),由于先比较hashCode(),此时hashCode()不相等,就认为这两个对象不相等。

你可能感兴趣的:(hashCode()和equals())