以 HashSet 为例,因为 hash 算法相对来说比较高效,如果两个对象 hashCode 不一样,则这两个对象是不同的对象,省去了遍历 set 逐个对此是否相同
如果两个对象相等,则 hashCode 一样,调用 equals 对比为 true
但是反过来如果两个对象的 hashCode 相等,这两个对象则不一定相同(hash 冲突),需要再通过 equals 进一步判断
如果重写了 equals,也要重写 hashCode,因为有可能出现两个对象内容相等但是地址不相同的情况,存放也会造成重复
因此:
- hashCode() 用来在最快时间内判断两个对象是否相等,并定位索引位置,但可能出现误差,用来保证效率
- equals() 用来保证可靠