首页javamapJava Collection - 如何仅更新Java HashMap对象键,导致意外的结果

Java Collection - 如何仅更新Java HashMap对象键,导致意外的结果

我们想知道如何仅更新Java HashMap对象键,导致意外的结果。
import java.util.HashMap;

public class Main {
    public static void main (String [] args)  {
        MyKey e1 = new MyKey(1);
        MyKey e2 = new MyKey(2);

        HashMap<MyKey, Integer> map = new HashMap<>();
        map.put(e1, 1);
        map.put(e2, 2);

        System.out.println(map.get(e1));
        System.out.println(map);

        e1.setValue(9);
        System.out.println(map.get(e1));
        System.out.println(map);

        e1.setValue(2);
        System.out.println(map.get(e1));
        System.out.println(map);

        
        MyKey e3 = new MyKey(2);
        System.out.println(map.get(e3));    
    }
}

class MyKey {
  private int n;

  public MyKey(int n) {
      this.n = n;
  }

  public void setValue(int n) {
      this.n = n;
  }

  @Override
  public int hashCode() {
      return n;
  }

  @Override
  public boolean equals(Object e) {
      if (this == e)
          return true;
      if (!(e instanceof MyKey))
          return false;
      MyKey an = (MyKey) e;
      return n == an.n;
  }

  @Override
  public String toString() {
    return "MyKey [n=" + n + "]";
  }
  
}