HashMap不适用于用户定义的密钥类

时间:2015-11-01 21:30:07

标签: java hashmap processing

我正在使用Processing language(派生自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。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

试试这个,你没有完全覆盖Object方法:

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;
    }
  }