0

HashMap があるとします。

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

MyKey は、2 つの整数要素 (および 2 つの整数を渡すためのコンストラクター) を持つデータ オブジェクトに対応します。

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

しかし、私はそれを使用できないようです:

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

私は偽になります。

HashMap はキーのカスタム データ オブジェクトを持つことができますか? 私は何が欠けていますか?ありがとう...

4

2 に答える 2

1

MyKey クラス (または HashMap または Set に入るその他のカスタム クラス)のequals()andメソッドをオーバーライドする必要があります。hashcode()そうすれば、containsKey()(または Set メソッド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 であると仮定します)

于 2013-05-03T15:17:39.507 に答える
0

System.out では、new MyKey(). ハッシュマップにMyKey(1,1234)ではなくが含まれているかどうかを確認しますnew MyKey(1,1234)

于 2013-05-03T15:14:10.217 に答える