hashcode()和equals()方法

两个对象的hashcode相等并不能说明这两个对象equals,因为hashcode必然存在hash冲突,无论概率高低,因此严格意义上的equals方法不能仅使用两个对象的hashcode来判断他们是否equals。

有些时候我们需要重写hashcode和equal方法。例如我们需要将自定义类 点:point[x,y] 放入hashSet中或者判断两个点是否相同

建议采用apache工具包commons.lang3.builder.EqualsBuilder和commons.lang3.builder.HashCodeBuilder

@Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (!(o instanceof Point))
            return false;
        Point that = (Point) o;
        return new EqualsBuilder().append(x,that.).append(y,that.y).isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37).append(x).append(y).toHashCode();
    }

 

posted @ 2018-07-25 13:29  一碗正气粥  阅读(148)  评论(0编辑  收藏  举报