2016-05-18 10 views
0

java api docの次の関数に基づいて、順序が保持されているようです。 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 私は、hascodeが実際の文字列と同様の順序であることをいくつかの例でテストしました。しかし、私がここで何かを見逃している場合に備えて、他人と確認したいと思っています。Java文字列のコード保存順序とハッシュベースのパーティショニング

その後、hadoopまたはsparkを使用して大きなデータアプリケーションでHashPartitionerまたはOrderPreservingPartitionerを使用するかどうかについての質問です。あなたのキーがちょうどJava Stringの場合、HashPartitionerは順序を保持する必要があります。

答えて

2

あなたの前提は間違っています:注文は保存されません。 "Aa"hashCode2112BAhashCode2111である。 "Aa""BA"より前ですが、hashCodeより大きくなります。

(また、あなたはint型をオーバーフローする前に、それは非常に長い文字列を取らないと、数字はまたあなたの仮定に違反することになる、折り返しを開始します。)

ありませんので、これらのどれもが順序を保持しません。

+0

ありがとうございました。はい、別の例では、intをオーバーフローさせてハッシュコードがマイナスになり、順序に違反したところで試しました。 – nir

関連する問題