.NET のメソッドについて同様の質問をしました。string.GetHashCode()
その時から、異なるマシン間で使用する場合、組み込み型のハッシュ コードの暗黙的な実装に依存できないことを学びました。したがって、Java 実装String.hashCode()
も異なるハードウェア構成間で不安定であり、VM 間で異なる動作をする可能性があると想定しています (異なる VM 実装を忘れないでください)。
現在、ハッシュによって Java で文字列を数値に安全に変換する方法について議論していますが、使用頻度が高いため、ハッシュ アルゴリズムはクラスターのさまざまなノード間で安定しており、評価が高速である必要があります。私のチーム メイトはネイティブhashCode
メソッドを主張しています。別のアプローチを再考させるには、合理的な議論が必要です。現在のところ、マシン構成 (x86 と x64) の違い、一部のマシンでは JVM のベンダーが異なる可能性 (私たちの場合はほとんど当てはまらない)、およびアルゴリズムが実行されているマシンに応じたバイト順の違いしか考えられません。走る。もちろん、文字エンコーディングも考慮する必要があります。
これらすべてのことが頭に浮かびますが、いずれかが十分に強力な理由であると 100% 確信できるわけではありません。この分野におけるあなたの専門知識と経験に感謝します。これは、カスタム ハッシュ アルゴリズムの作成を支持する強力な議論を構築するのに役立ちます。また、実装時にやってはいけないことについてアドバイスをいただければ幸いです。