2013-06-14 2 views

答えて

11

場合によっては、識別可能なオブジェクトのセットを作成することもできます。それらのオブジェクトのいくつかはと等しいかもしれませんお互いに、しかしあなたは依然として真に重複している参照を投げ捨ててすべてのものへの参照が必要です。 equalsの実装が興味のあるものではないため(実際にはそうしたくない場合はequalsをオーバーライドするクラスもあれば、実際に別のインスタンスなどをカウントしようとしているだけなので)

これを効率的に行うには(つまり、何らかのハッシュテーブルを利用する)、均等ではなく同一性に基づくハッシュコードが必要です。これはまさにidentityHashCodeのものです。 はめったにありません便利ですが、それはまだ時々便利です。

+0

要するに、Guavaの「Equivalence.identity()」は何ですか?しかし、それでも、あなたは 'IdentityHash {Map、Set}'を持っています。 – fge

+3

@fge: 'System.identityHashCode'は、それらのデータ構造のすべての実装方法です。 –

+0

"(いくつかのオブジェクトは、あなたが実際にそれらを必要としないときに等価を実装します)"あなたの答えのこの部分を愛してください。ありがとう。 –

3

普通のObjectの場合は、それは冗長です。しかし、クラスが、hashCodeをオーバーライドできる型のインスタンスに対して、デフォルトのhashCodeの実装(参照の等価性に基づく)を使用する場合があります。

Grepcode lists these call sites、つまりIdentityHashMapを含む。

関連する問題