fai*_*can 3 java hash performance
我正在构建一个哈希函数,它应该将任何字符串(最大长度 100 个字符)映射到单个 [AZ] 字符(我将它用于分片)。
我想出了这个简单的Java函数,有没有办法让它更快?
public static final char stringToChar(final String s) {
long counter = 0;
for (char c : s.toCharArray()) {
counter += c;
}
return (char)('A'+(counter%26));
}
Run Code Online (Sandbox Code Playgroud)
均匀分布“碎片”的一个快速技巧是使用哈希函数。
我建议这种使用默认javaString.hashCode()函数的方法
public static char getShardLabel(String string) {
int hash = string.hashCode();
// using Math.flootMod instead of operator % beacause '%' can produce negavive outputs
int hashMod = Math.floorMod(hash, 26);
return (char)('A'+(hashMod));
}
Run Code Online (Sandbox Code Playgroud)
正如这里所指出的,这种方法被认为“甚至足够”。
根据快速测试,它看起来比您建议的解决方案更快。
在各种长度的 80kk 弦上:
getShardLabel 花了 65 毫秒stringToChar 耗时 571 毫秒