在对象的 hashCode() 和 equals() 实现被覆盖后使用它们

Using Object's hashCode() and equals() implementations after they have been overriden

假设我有:

public class A {
    @Override
    public int hashCode() {
        // some expensive calculation
    }

    @Override
    public boolean equals(Object obj) {
        // some expensive calculation
    }
}

在我的代码中的某个时刻,我希望使用 Object's hashCode() 和 A 作为键类型 的映射equals() 实现(即当且仅当它们引用同一对象时,类型 A 的两个键将被视为相等)。

最好的方法是什么?

您可以在实例化时覆盖方法

A a = new A(){
  @Override
  public int hashCode() {
    return System.identityHashCode(this);
  }
};

或者使用 IdentityHashMap,它使用 System.identityHashCode