1

リンクから:

http://www.tutorialspoint.com/java/java_string_hashcode.htm

Java における hashCode と equals メソッドの関係

hashCode() の適切な実装

しかし、ハッシュコードについては理解できません。

次に例を示します。

public class StringDemo {
    public static void main(String args[]){
        String strob1="first string";
        System.out.println(strob1.hashCode());
    }

    }

この単純なプログラムは私に出力を与えます:-5468287

誰でも教えてもらえますか:どのように出力が得られるか: -5468287?

4

4 に答える 4

4

文字列のハッシュ コードは次のように計算されます。

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

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

したがって、この整数計算のオーバーフローは簡単に発生する可能性があり、Java 言語仕様-15.8.2に従って負の結果になります。

整数の加算がオーバーフローした場合、結果は十分に大きな 2 の補数形式で表される数学的合計の下位ビットになります。オーバーフローが発生した場合、結果の符号は、2 つのオペランド値の数学的な合計の符号と同じではありません。

于 2013-11-14T18:42:31.503 に答える
1

本質的に、データ構造をコーディングしていない限り、自分で呼び出すことはありません (ほとんどの場合、その必要はありません)。

ただし、多くの場合、1 つを実装します。最近では、ほぼすべての IDE で equals と hashCode の自動生成が提供されています。しばらくはそれを使用することをお勧めします。equals を実装するときはいつでも、hashCode 実装も生成します。

于 2013-11-14T18:39:13.940 に答える
1

なんで?メソッドは java.lang.Object で定義されています。定義したクラスはそれを継承します。

ここにリンクの説明を入力してください を参照してください。

何?ハッシュとは何かについてもっと勉強することをお勧めします。Wiki ハッシュ関数.

于 2013-11-14T18:39:42.737 に答える