有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将单词映射为单个字符

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

共 (1) 个答案

  1. # 1 楼答案

    实现“碎片”均匀分布的一个快速技巧是使用哈希函数

    我建议这个方法使用默认的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毫秒