关于hashCode的灵魂三问

216 阅读1分钟

为什么要重写hashCode方法?

其实是为了保证Map集合的索引速度。

为什么重写equals方法,必须要重写hashCode方法?

其实是一种规范,因为equals判断如果两个对象是相等的,那么同时必须保证有相同的hashCode编码,所以重写hashCode方法。

有没有可能2个不相等的对象有相同的hashCode?

可能会发生,这个被称为哈希碰撞。

当然,相等的对象,即我们重写了equals方法,一定也要重写hashCode方法,否则将会出现我们的HashMap中,相等的对象作为key,将找不到对应的value,也就是说,如果不重写hashCode方法的情况下,可能一个map中存在多个key相等的映射关系。

所以说,equals和hashCode的关系是:

  • equals不相等hashCode可能相等。

  • equals相等,请重写hashCode方法,保证hashCode相等。