hashCode()和equals()

以 HashSet 为例,因为 hash 算法相对来说比较高效,如果两个对象 hashCode 不一样,则这两个对象是不同的对象,省去了遍历 set 逐个对此是否相同

如果两个对象相等,则 hashCode 一样,调用 equals 对比为 true

但是反过来如果两个对象的 hashCode 相等,这两个对象则不一定相同(hash 冲突),需要再通过 equals 进一步判断

如果重写了 equals,也要重写 hashCode,因为有可能出现两个对象内容相等但是地址不相同的情况,存放也会造成重复

因此:

  • hashCode() 用来在最快时间内判断两个对象是否相等,并定位索引位置,但可能出现误差,用来保证效率
  • equals() 用来保证可靠