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;
}