HashMap -使用自定义数据对象



假设我有一个HashMap:

HashMap<MyKey, Integer> HM = new HashMap<MyKey, Integer>();

MyKey对应于具有两个整数元素的数据对象(以及用于传递两个整数的构造函数)。

HM.put(new MyKey(1,1234), 1); // this seems to work...

但是,我似乎不能使用它:

System.out.println(HM.containsKey(new MyKey(1,1234)));

I get false.

HashMap可以有一个键的自定义数据对象吗?我错过了什么?谢谢…

您应该在MyKey类(或任何其他将进入HashMap或Set的自定义类)中重写equals()hashcode()方法。这样,当您说containsKey()(或Set方法contains()equals())时,您将显式指定MyKey的哪些属性要检查是否包含或相等。

你可以有一个简单的equals()hashCode()方法像这样在你的MyKey类

@Override
public boolean equals(Object o) {
    boolean result = false;
    if (o instanceof MyKey) {
        MyKey mykey = (MyKey) o;
        result = (this.getX() == mykey.getX() && mykey.getY() == mykey.getY());
    }
    return result;
}
@Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + X;
        result = prime * result + Y;
        return result;
    }

(假设MyKey类中的字段是X和Y)

在您的系统中。输出时,生成的是new MyKey()。您需要检查hashmap是否包含MyKey(1,1234),而不是new MyKey(1,1234)

相关内容

  • 没有找到相关文章

最新更新