为什么java重写equals的时候 要重写hashCode?

新手上路,请多包涵

为什么java重写equals的时候 要重写hashCode?
我认为有两点需要关注:

  1. hashCode是不是重写需要看业务,开放开发人员可以重写这个方法,可能有这种情况,比如我们仅仅对比object的部分属性,就认为两者相等,而不对比其其他属性。
  2. 重写java object hashCode方法,是为了在一些算法中避免我们不想要的冲突和碰撞。比如其HashMap,HashSet的使用中。
阅读 4.6k
1 个回答

我觉得主要还是第二点,避免碰撞和冲突。
hashCode 用在 集合类 中标识单个对象,个人认为还是有必要重写的。

而且当程序员 业务实体对象被创建出来后,可能能够合理利用,但是其他人在使用该对象的时候没必要特别留意 hashCode。
apache commons 提供了帮助方法,挺好用的:

    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题