1

Javaでは、メソッドの代わりにHashMap参照の等価性 (つまり) を使用して作成することは可能ですか?==equals()

4

3 に答える 3

6

IdentityHashMapクラスを使用します。これは、との代わりに と が使用されるHashMap==バリアントです。System.identityHashCode()Object.equals(Object)Object.hashCode()

このクラスは、キーの等価性が に基づいている必要がjava.util.Mapあるの API コントラクトに意図的に違反していることに注意してください。equals(Object)

于 2014-04-01T10:24:05.303 に答える
1

IdentityHashmapクラスには、標準のJava が付属しています。JavaDoc から:

このクラスは、キー (および値) を比較するときに、オブジェクトの等価性の代わりに参照の等価性を使用して、ハッシュ テーブルを使用して Map インターフェイスを実装します。つまり、IdentityHashMap では、(k1==k2) の場合にのみ、2 つのキー k1 と k2 が等しいと見なされます。(通常の Map 実装 (HashMap など) では、2 つのキー k1 と k2 が等しいと見なされるのは、(k1==null ? k2==null : k1.equals(k2)) の場合のみです)。

sを取る多くの関数は、参照等価性ではなくMapを使用することを前提にしていることに注意してください。equalsそのため、渡す関数に注意してくださいIdentityHashmap

于 2014-04-01T10:27:34.987 に答える
1

HashMap に挿入するオブジェクトの equals メソッドをオーバーライドして、参照の等価性をテストできます。

次のように:

public boolean equals(Object obj) {
    return this == obj;
}
于 2014-04-01T10:23:39.597 に答える