1.hashcode有什么用?
hashCode()的作用是获取哈希码,来确定该对象在哈希表中的索引位置。
2.为什么要有hashCode?
hashCode()
和 equals()
都是用于比较两个对象是否相等。
如果 HashSet
在对比的时候,同样的 hashCode
有多个对象,它会继续使用 equals()
来判断是否真的相同。
总结下来就是:
- 如果两个对象的
hashCode
值相等,那这两个对象不一定相等(哈希碰撞)。 - 如果两个对象的
hashCode
值相等并且equals()
方法也返回true
,我们才认为这两个对象相等。 - 如果两个对象的
hashCode
值不相等,我们就可以直接认为这两个对象不相等。
3.为什么重写equals方法时必须重写hashcode()方法?
java中哈希表数据结构(如hashMap、HashSet)在插入和查找元素的时候通常使用对象的哈希值来确定存储的位置。
哈希表根据对象的哈希值将其映射到不同的存储桶中,然后在存储桶中使用equals()方法来比较元素是否相等。
如果两个对象通过equals()方法相等但哈希值不同,哈希表会认为它是两个不同的对象,将无法正确查找和删除元素。