4

の用途はGetHashCode()何ですか? を使用してオブジェクトのアイデンティティを追跡できますGetHashCode()か? もしそうなら、例を挙げていただけますか?

4

4 に答える 4

22

ハッシュコードはアイデンティティに関するものではなく、平等に関するものです。実際、それらは不平等に関するものであると言えます。

  • 2 つのオブジェクトが同じハッシュ コードを持つ場合、それら等しい可能性があります
  • 2 つのオブジェクトのハッシュ コードが異なる場合、それらは等しくありません

ハッシュ コードは一意ではなく、等しいことを保証するものでもありません (2 つのオブジェクトが同じハッシュを持っていても等しくない場合があります)。

それらの用途については、ほとんどの場合、同等である可能性のあるオブジェクトをすばやく選択して、実際の同等性をテストするために使用されます。通常は、キー/値マップ ( などDictionary<TKey, TValue>) またはセット ( などHashSet<T>) で使用されます。

于 2009-09-03T20:45:06.133 に答える
5

いいえ、HashCode が一意であるとは限りません。ただし、オブジェクトへの参照は既にあります。これらは、object.ReferenceEquals().

于 2009-09-03T20:40:53.600 に答える
1

値自体は、ハッシュテーブルなどのハッシュ アルゴリズムで使用されます。

デフォルトの実装では、GetHasCode はオブジェクトの一意性を保証しないため、.NET オブジェクトをそのように使用しないでください。

独自のクラスでは、GetHashCode をオーバーライドして、オブジェクトに一意の値を作成することをお勧めします。

于 2009-09-03T20:43:13.423 に答える
1

ハッシュを必要とするアルゴリズムやデータ構造 (ハッシュ テーブルなど) に使用されます。同じハッシュを持つ 2 つのオブジェクトが必ずしも等しいとは限らないため、ハッシュ コードを単独でオブジェクト ID の追跡に使用することはできません。ただし、2 つの同等のオブジェクトは同じハッシュ コードを持つ必要があります (そのため、一方をオーバーライドせずに他方をオーバーライドすると、C# が警告を発します)。

于 2009-09-03T20:44:18.443 に答える