私はにそれらの文字列を格納するために、文字列のためにlong
のIDを生成するJavaアプリケーションを持っています。データの重複を避けるために、long
整数に格納された各文字列のidを生成したいと思います。これは各文字列で一意でなければなりません。どうやってやるの ?文字列の長いハッシュを生成するにはどうすればよいですか?
5
A
答えて
4
long
は64ビットです。長さ9のString
は72ビットを有する。 pigeon hole principleから - 9文字の長い文字列に対して一意のハッシングをlong
に取得することはできません。
あなたはまだlong
ハッシュをしたい場合:あなただけString->int
、hash1()
とhash2()
のための2つの標準的な[!異なる]ハッシュ関数を取ると計算できます。hash(s) = 2^32* hash1(s) + hash2(s)
6
文字列のhashcode()
の機能を見て、代わりに長い値を使用するのはなぜですか?
Btw。各文字列に対して一意のIDを作成する方法があれば、すべての文字列を8バイトにまとめることができる圧縮アルゴリズムが見つかりました(定義では不可能)。多くの答えがあります
1
、以下を試してみてください。
http://stackoverflow.com/questions/415953/generate-md5-hash-in-javaEDIT:削除され、私が見逃していますlong
が必要です。 Mea culpa。- http://en.wikipedia.org/wiki/Perfect_hash_function
あるいは、前に示唆したように、ソースをチェックアウト。
PS。もう1つの方法は文字列の辞書を維持することです:2 の文字列はすぐには得られないので、完全なマッピングができます。ただし、そのマッピングも大きなボトルネックになる可能性があります。
5
このコードはかなり良いハッシュを計算します:
String s = "some string";
long hash = UUID.nameUUIDFromBytes(s.getBytes()).getMostSignificantBits();
関連する問題
- 1. AppleScriptでは、クリップボードに文字列のMD5ハッシュを生成するにはどうすればよいですか?
- 2. IPアドレスを8文字の長い文字列にマップするにはどうすればよいですか?
- 3. 長い文字列を15文字のテキストコントロール/ラベルでスクロールするにはどうすればいいですか?
- 4. 文字列の長さを150文字に制限するにはどうすればよいですか?
- 5. ハッシュをRuby 1.9のJSON文字列に変換するにはどうすればよいですか?
- 6. Java:文字列からPrivateKeyを生成するにはどうすればよいですか?
- 7. Javaで擬似ランダム "可読"文字列を生成するにはどうすればよいですか?
- 8. PHPでセキュリティ文字列を生成するにはどうすればよいですか?
- 9. 接続文字列はどうすればよいですか?
- 10. 文字列のユニークなハッシュコードを生成するにはどうすればいいですか?
- 11. 文字列/数字を文字列に追加するにはどうすればよいですか?
- 12. Androidの文字列の長さを制限するにはどうすればよいですか?
- 13. 長いJSON値文字列を複数行にするにはどうすればいいですか?
- 14. Cの文字配列から文字列を取得するにはどうすればよいですか?
- 15. mysqlで平均文字列長を取得するにはどうすればよいですか?
- 16. PerlでUnicode文字列の長さを調べるにはどうすればよいですか?
- 17. 文字列をiOSの部分文字列に分割するにはどうすればよいですか?
- 18. C#で文字列をPascalCase文字列に変換するにはどうすればよいですか?
- 19. 文字列へのWCHAR、どうすればよいですか?
- 20. 文字列値で列挙型のオブジェクトを作成するにはどうすればよいですか?
- 21. 63文字より長いシステムトレイのツールチップを表示するにはどうすればよいですか?
- 22. Pythonで最も長い文字列を見つけるにはどうすればいいですか?
- 23. 文字列から文字列を抽出するにはどうすればよいですか?
- 24. iOSで通知文字のような時間の文字列を生成するにはどうすればよいですか? iOSの
- 25. 文字列内の部分文字列を交換するにはどうすればよいですか?
- 26. [[String]]の文字列値を文字列と比較するにはどうすればよいですか?
- 27. 文字列変数をxcodeの文字列と比較するにはどうすればよいですか?
- 28. C++/Arduino:文字列/文字配列をバイトに変換するにはどうすればよいですか?
- 29. PHP文字列値をアンドロイド文字列値に変換するにはどうすればよいですか?
- 30. 別の文字列の後に文字列を印刷するにはどうすればいいですか?
ストリングのハッシュを取得してネオに保管する前にそれらを長くキャストできませんでしたか? – Marthin
"すべての文字列に対してユニーク"を達成することはできません - 長さは64ビット、長さは9ビット、長さは72ビットです。同じ長さにハッシュされる文字列があります – amit
独自性を得ることはできません。無限に多くの弦と有限の長さしか持たない。より具体的にあなたが探しているものを記述できますか? – templatetypedef