HashMap - 使用自定义数据对象

时间:2013-05-03 15:10:40

标签: get hashmap containskey

假设我有一个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)));

我弄错了。

HashMap可以为Key设置自定义数据对象吗?我错过了什么?感谢...

2 个答案:

答案 0 :(得分:1)

您应该覆盖MyKey类中的equals()hashcode()方法(或任何其他自定义类,以便进入HashMap或Set)。这样,当您说containsKey()(或设置方法contains()equals())时,您将明确指定要检查包含或相等的MyKey的哪些属性。

您可以在MyKey类中使用简单的equals()hashCode()方法

@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)

答案 1 :(得分:0)

在您的System.out中,您正在生成new MyKey()。您想要检查您的散列图是否包含MyKey(1,1234),而不是new MyKey(1,1234)