0

私は大学でのプロジェクトで問題を抱えていました。ダブル ハッシュされた文字列オブジェクトを返すクラスにダブル ハッシュ メソッドを記述する必要があります。JavaにはhashCode()メソッドが組み込まれているという事実を考えると、これは比較的簡単だと思いましたが、hashCodeを2回繰り返してもまったく同じ値が返されるようです。例えば:

StringHashCode.java:

public class StringHashCode implements HashCode{
    @Override
    public int giveCode(Object obj) {
        return obj.hashCode();
    }
}

スペル.java

while(dict_fwr.hasNextWord())
{
   String derp = dict_fwr.nextWord();
   System.out.print(derp + "(hash value = " + impl.giveCode(derp) + ")" + "(Double hashed = " + impl.giveCode(impl.giveCode(derp)) + ")\n" );
}

出力からの抜粋:

midwest(hash value = 1055712247)(Double hashed = 1055712247)
partakes(hash value = 1188620491)(Double hashed = 1188620491)
interspersed(hash value = 486466540)(Double hashed = 486466540)
marginally(hash value = 1971567014)(Double hashed = 1971567014)
bemoans(hash value = -223340895)(Double hashed = -223340895)
bankrupt(hash value = -1858199613)(Double hashed = -1858199613)
transpire(hash value = 1052958868)(Double hashed = 1052958868)
conspire(hash value = -567922531)(Double hashed = -567922531)

dict は単語のリストを含むファイルで、クラスは講師が作成したクラスで、次の文字列を返し、別の単語があるかどうかをチェックします。

4

4 に答える 4

1

に を渡しintますgiveCode()。それは整数として自動ボックス化されます。Integer のハッシュ コードは整数値であるため、ハッシュ コード値のハッシュ コードは同じです。ドキュメントから:

戻り値:このオブジェクトのハッシュ コード値。この Integer オブジェクトによって表されるプリミティブ int 値に等しい。

于 2013-10-18T14:11:39.653 に答える
0

問題は、オブジェクトの hashCode がint. それを にボックスint化するIntegerと、返される hashCode はint再びそれになります。

これを回避するには、inthashCode を文字列にしてから、2 番目の文字列の hashCode を取得します。

これは、メイン メソッドで段階的に表示されるものです。

public class StringHashCode {
    public static void main(String[] args) {
        // make a String
        String stringToDoubleHash = "Hi There";
        // hashCode of the String
        int hashCode = stringToDoubleHash.hashCode();       
        // String representation of hashCode
        String hashCodeString = Integer.toString(hashCode);
        // hashCode of String representation of first hashCode
        int doubleHash = hashCodeString.hashCode();
        System.out.println(hashCode);
        System.out.println(doubleHash);
    }
}

プリントアウト:

623806085
2090143206

ニーズに合わせて上記を調整してください。

于 2013-10-18T14:21:39.603 に答える