Javaでは、メソッドの代わりにHashMap参照の等価性 (つまり) を使用して作成することは可能ですか?==equals()
3 に答える
IdentityHashMapクラスを使用します。これは、との代わりに と が使用されるHashMapの==バリアントです。System.identityHashCode()Object.equals(Object)Object.hashCode()
このクラスは、キーの等価性が に基づいている必要がjava.util.Mapあるの API コントラクトに意図的に違反していることに注意してください。equals(Object)
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。
HashMap に挿入するオブジェクトの equals メソッドをオーバーライドして、参照の等価性をテストできます。
次のように:
public boolean equals(Object obj) {
return this == obj;
}