私はにそれらの文字列を格納するために、文字列のために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. PHPで長さがランダムな文字列を生成するにはどうすればよいですか?
- 3. IPアドレスを8文字の長い文字列にマップするにはどうすればよいですか?
- 4. 文字列の長さを150文字に制限するにはどうすればよいですか?
- 5. 長い文字列を15文字のテキストコントロール/ラベルでスクロールするにはどうすればいいですか?
- 6. 複数行の文字列から配列を生成するにはどうすればよいですか?
- 7. 文字列の順列を生成するランタイムを減らすにはどうすればよいですか?
- 8. ハッシュをRuby 1.9のJSON文字列に変換するにはどうすればよいですか?
- 9. 文字列内の文字列を文字列内で渡すにはどうすればよいですか?
- 10. Java:文字列からPrivateKeyを生成するにはどうすればよいですか?
- 11. 長い文字列をcsv形式に変換するにはどうすればよいですか?
- 12. Javaで擬似ランダム "可読"文字列を生成するにはどうすればよいですか?
- 13. PHPでセキュリティ文字列を生成するにはどうすればよいですか?
- 14. クエリ文字列をハッシュに変換するにはどうすればよいですか?
- 15. C#長い二重の数字をランダムに生成するにはどうすればいいですか?
- 16. 文字列からランダムな文字を作成するにはどうすればよいですか?
- 17. 長さの異なる文字列のタイムスタンプを解析するにはどうすればよいですか?
- 18. 接続文字列はどうすればよいですか?
- 19. Androidで文字列リソースの長さ制限を設定するにはどうすればよいですか?
- 20. 文字列のユニークなハッシュコードを生成するにはどうすればいいですか?
- 21. 文字列内の\文字を/文字に変更するにはどうすればよいですか?
- 22. Androidの文字列の長さを制限するにはどうすればよいですか?
- 23. 文字列/数字を文字列に追加するにはどうすればよいですか?
- 24. Excel/VBAを使用して文字列を32文字の英数字文字列に圧縮/伸長するにはどうすればよいですか?
- 25. 同じ長さの文字列を維持するにはどうすればよいですか?
- 26. mysqlで平均文字列長を取得するにはどうすればよいですか?
- 27. PerlでUnicode文字列の長さを調べるにはどうすればよいですか?
- 28. 長いJSON値文字列を複数行にするにはどうすればいいですか?
- 29. Cの文字配列から文字列を取得するにはどうすればよいですか?
- 30. テキストファイルからJava文字列に文字列をコピーするにはどうすればよいですか?
ストリングのハッシュを取得してネオに保管する前にそれらを長くキャストできませんでしたか? – Marthin
"すべての文字列に対してユニーク"を達成することはできません - 長さは64ビット、長さは9ビット、長さは72ビットです。同じ長さにハッシュされる文字列があります – amit
独自性を得ることはできません。無限に多くの弦と有限の長さしか持たない。より具体的にあなたが探しているものを記述できますか? – templatetypedef