Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将单词映射到单个字符_Java_Performance_Hash - Fatal编程技术网

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

我正在构建一个散列函数,它应该将任何字符串(最大长度为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'+(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串上:

  • getShardLabel
    花费了65毫秒
  • stringToChar
    耗时571毫秒

为什么不直接使用字符串的第一个字符?计算所有字符的好处是什么?当只使用第一个字符时,您是否期望分布非常不均匀?@RobbyCornelissen正如您正确猜测的那样,知道字符串的一般格式,我期望分布不均匀如果您想让它更快,那么不要使用ToCharray,但是使用charAt检索字符method@RobbyCornelissen我的问题是关于性能优化,而不是输出分配本身