Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

文字列から指定バイト数分のハッシュ値を生成したい

はじめまして。

Javaにて、ある文字列からハッシュ値(シーケンス番号)を生成し、DBのint型カラムにInsertしたいと考えております。
ただし、その数値は負値(-1〜-2147483648まで)である必要があります。

どなたか実現方法をご教授いただけませんでしょうか?
情報不足でしたら、ご指摘いただければと思います。
宜しくお願いします。

5

回答

80709

閲覧

5件の回答

評価

0

というか、ハッシュ値が何だか知ってる?
シーケンスとは明らかに違うものなんだけど。

評価

0

回答ありがとうございます。

別物だということは理解しています。
(ダブル可能性があることも。そういう意味ではシーケンスという表現が違っておりますが)

そういう数値が生成できる仕組みを考えております。
宜しくお願いします。

評価

0

値の範囲はintのようだし、
普通にgetHashCode()で値をとって、
正の数なら、2の補数で反転させりゃいいんじゃないの。

評価

0

String の hashCode() メソッドを使うのが良いと思います。Object の hashCode() はインスタンスのアドレスを返すという実装なので適してはいませんが、String では hashCode() がオーバーライドされており、自身の文字列のハッシュ値を返すようになっていますので。

ただし、Java 1.2 の前後でハッシュアルゴリズムが変更されています。将来、またハッシュアルゴリズムが変更される可能性がないとは言い切れませんね。たとえば Java 6 で出力したハッシュと Java 8 で出力したハッシュが違ってしまう可能性も 0 ではないということです。

ハッシュアルゴリズムが固定されていることを保証したい場合は、java.util.zip.CRC32 を使うのも良いと思います。いずれの方法でも 31ビットを超えていますので、そこはうまくマスクしてあげてください。

評価

0

ある時点での文字列"A"と、別の時点での文字列"A"を常に同じ値で表したいのなら、素直に自前でハッシュ関数を作るべし。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。