Java 将单词映射到单个字符
我正在构建一个散列函数,它应该将任何字符串(最大长度为100个字符)映射到单个[a-Z]字符(我使用它进行切分) 我提出了这个简单的Java函数,有没有办法让它更快Java 将单词映射到单个字符,java,performance,hash,Java,Performance,Hash,我正在构建一个散列函数,它应该将任何字符串(最大长度为100个字符)映射到单个[a-Z]字符(我使用它进行切分) 我提出了这个简单的Java函数,有没有办法让它更快 public static final char stringToChar(final String s) { long counter = 0; for (char c : s.toCharArray()) { counter += c; } return (char)('A'+(c
public static final char stringToChar(final String s) {
long counter = 0;
for (char c : s.toCharArray()) {
counter += c;
}
return (char)('A'+(counter%26));
}
实现“碎片”均匀分布的一个快速技巧是使用散列函数 我建议此方法使用默认的java
String.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));
}
正如所指出的,这种方法被认为是“足够”
根据快速测试,它看起来比您建议的解决方案快。在不同长度的80kk串上:
花费了65毫秒getShardLabel
耗时571毫秒stringToChar