★★Java質問・相談スレッド149★★
■ このスレッドは過去ログ倉庫に格納されています
0353デフォルトの名無しさん
2011/12/10(土) 20:04:04.97文字列を一意のユニークID(整数値)にして、ユニークID(整数) 数値 という形で出力させたいと
考えていて、string型のhashCode()メソッドを利用して実装しました。
(具体的な用途としては、csvをMySQLに読み込み、文字列のハッシュ値を計算して問い合わせることが出来るようにすることです。)
その結果、240万件のうち20万件のハッシュ値が衝突しました。その後の調査で、問題のレコートの一部に、
UTF-8の4バイト文字(機種依存文字、そのマシンでは文字化け)が含まれていることが分かりました。
さらに調べてみると、hashCode()にはこのような文字列を送ることは推奨されておらず、
またhashCode()についても算出されるハッシュ値のユニークさを保証するものではないとのことでした。
恐らく表示は出来なくてもそれぞれの文字を表す一意な文字コード自体はそこに存在しているはずなので、
何らかの方法でハッシュ化は出来るはずと考えているのですが、UTF-8の4バイト文字を扱え、
またユニークなハッシュ値を生成できる方法をご存じの方がいらっしゃいましたらご教示願います。
なお、今回利用したソースは以下の通りです
public class Main {
__public static void main(String[] args) throws IOException {
____CSVReader reader = new CSVReader(new FileReader("raw.csv"));
____CSVWriter writer = new CSVWriter(new FileWriter("hashed.csv"));
____
____String[] nextLine;
____while ((nextLine = reader.readNext()) != null) {
______String[] outData = new String[] {String.valueOf(nextLine[0].hashCode()), nextLine[1]};
______writer.writeNext(outData);
____}
____writer.close();
__}
}
■ このスレッドは過去ログ倉庫に格納されています