-2

見出しが使用されているように見えるかもしれませんが、これは重複していないと確信しています。

JAVAでハッシュコードが計算される基準は何ですか???

現在の状態に基づいて?私はそうは思わない。

コードは次のとおりです。

    initTest inttt2 = new initTest();// this initTest has params: int x and String str
    inttt2.str = "i am object1";
    inttt2.x = 374892762;
    System.out.println(inttt2.hashCode()); // print say 12345
    inttt2.x = 938745;
    inttt2.str = "i am object22222222";
    System.out.println(inttt2.hashCode()); // still print 12345

ここに質問があります: ハッシュコードは、現在の状態に依存しない場合、メモリ内の場所に依存しますか?

オブジェクトをどれだけ変更しても、ハッシュコードは同じままですか??

私はデータ構造の専門家ではありませんが、1 つの質問に悩まされています。

このハッシュコード(特にオブジェクトのネイティブ)関数は、整数の範囲内のハッシュ値を返す必要があるため、属性による計算以外にどのようなオプションがありますか。

4

1 に答える 1

3

これは、ドキュメントがObject#hashCode()について述べていることです。

合理的に実用的である限り、クラス Object によって定義された hashCode メソッドは、個別のオブジェクトに対して個別の整数を返します。(これは通常、オブジェクトの内部アドレスを整数に変換することによって実装されますが、この実装手法は JavaTM プログラミング言語では必要ありません。 )

String#hashCode()はより決定論的です。

この文字列のハッシュ コードを返します。String オブジェクトのハッシュ コードは次のように計算されます。

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

int 演算を使用します。ここで、s[i] は文字列の i 番目の文字、n は文字列の長さ、^ はべき乗を示します。(空の文字列のハッシュ値はゼロです。)

于 2013-06-11T17:02:32.920 に答える