我有一堂课

class Pair<T>{
    private T data;
    private T alternative;
}


如果两个对对象相等

this.data.equals(that.data) && this.alternative.equals(that.alternative) ||
this.data.equals(that.alternative) && this.alternative.equals(that.data)


我在正确实现hashCode()部分时遇到了困难。任何建议,将不胜感激

最佳答案

这应该可以解决问题:

  @Override
  public int hashCode() {
    return data.hashCode() * alternative.hashCode();
  }


由于要将两个字段都包含在等式中,因此需要将两个字段都包含在hashCode方法中。如果不相等的对象最终具有相同的哈希码是正确的,但是根据您的方案,相等的对象将始终使用此方法最终具有相同的哈希码。

10-08 15:27