1. ホーム
  2. c#

[解決済み] hashCodeは何に使うのですか?ユニークですか?

2022-06-06 01:50:10

質問

私は getHashCode() メソッドがあり、それは数字のシーケンスを返します。このハッシュコードを使って、アイテムを特定することはできますか?例えば、端末内の画像や楽曲を特定し、その所在を確認したい。特定のアイテムに付与されたハッシュコードがユニークであれば、このようなことが可能です。

hashCodeとは何ですか? getHashCode() は何に使うのでしょうか?

どのように解決するのですか?

MSDNによると :

<ブロッククオート

ハッシュコードは、オブジェクトを識別するために使用される数値です。 を識別するために使用される数値です。また、コレクション内のオブジェクトのインデックスとしても使用されます。 のインデックスにもなります。

GetHashCodeメソッドは、ハッシュアルゴリズムやハッシュテーブルのようなデータ構造で使用するのに適しています。 ハッシュテーブルのようなデータ構造での使用に適しています。

GetHashCode メソッドのデフォルトの実装は、異なるオブジェクトに対して一意な戻り値を保証するものではありません。 異なるオブジェクトに対して一意な戻り値を保証するものではありません。さらに .NET Framework は、GetHashCode メソッドのデフォルトの実装を保証していません。 GetHashCode メソッドのデフォルトの実装と、それが返す値は、.NET Framework の異なるバージョン間で同じになることを保証するものではありません。 .NET Frameworkの異なるバージョン間で同じ値を返すことは保証されていません。そのため、このメソッドのデフォルトの このメソッドのデフォルトの実装は、ハッシュの目的で一意のオブジェクト 識別子として使用してはなりません。

GetHashCodeメソッドは派生型によってオーバーライドされることがあります。値 型は、その型に適したハッシュ関数を提供するために、このメソッドをオーバーライドする必要があります。 その型に適したハッシュ関数を提供し、ハッシュテーブルの有用な分布を提供するために、このメソッドをオーバーライドする必要があります。 ハッシュテーブルの有用な分布を提供するために、このメソッドをオーバーライドする必要があります。一意性のために、ハッシュコードは、インスタンスフィールドまたはプロパティの値 ハッシュコードは、静的なフィールドやプロパティではなく、インスタンスフィールドやプロパティの値に基づかなければなりません。 プロパティの値に基づいていなければなりません。

Hashtableオブジェクトのキーとして使用されるオブジェクトもまた、GetHashCodeメソッドをオーバーライドする必要があります。 これらのオブジェクトは独自のハッシュコードを生成する必要があるため、GetHashCodeメソッドをオーバーライドする必要があります。 コードを生成しなければならないからです。キーとして使用されるオブジェクトが有用な キーとして使われるオブジェクトがGetHashCodeの有用な実装を提供しない場合、Hashtableオブジェクトの構築時にハッシュコードプロバイダを指定することができます。 を指定することができます。.NET Frameworkバージョン2.0以前では バージョン2.0以前は、ハッシュコード・プロバイダは System.Collections.IHashCodeProvider インターフェイスに基づいていました。バージョン 2.0 以降、ハッシュ コード プロバイダーは System.Collections.IEqualityComparer インターフェースに基づいています。

基本的に、ハッシュコードはハッシュテーブルを実現するために存在します。

2つの等しいオブジェクトは、等しいハッシュコードを持つことが保証されています。

2つの不等価なオブジェクトは ではなく ハッシュコードが不等であることが保証されています(これは衝突と呼ばれます)。