HashMap 不适用于用户定义的键 class

HashMap doesn't work with user defined key class

我正在使用处理语言(派生自 Java PApplet)版本 3.01

这是我的代码...

  Pig a = new Pig(1);
  Pig b = new Pig(1);
  HashMap<Pig, String> m = new HashMap<Pig, String>();
  m.put(a,"foo");
  String c = m.get(b);
  println(c);  

class Pig {
  int a;
  Pig(int x) { a=x;}
  boolean equals(Pig b) { return b.a==a;}
  int hashCode() { return a;}
}

如您所见,我使用 Pig 作为键,我定义了 equals 和 hashCode。我期望输出 "foo",但是,我得到输出 null。

知道这里发生了什么吗?为什么这不起作用?

您没有覆盖 equals(Object),但您确实实现了一个不相关的 equals(Pig) 方法。 HashMap 使用前者,你的方法甚至都没有被调用。

尝试一下,您根本没有/正确地覆盖对象方法:

class Pig {
    int a;

    Pig(int x) {
      a = x;
    }

    @Override
    public boolean equals(Object b) {
      if(b == null) return false;
      if(!(b instanceof Pig)) return false;
      if(b == this) return true;
      return ((Pig) b).a == a;
    }

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