使哈希计算更快

时间:2018-11-25 21:46:35

标签: java

我在这里有此代码,需要对其进行修改。它可以工作,但是由于“哈希”的计算方式很慢。我需要通过不同地编写计算来使其更快。任何想法将不胜感激。我必须立即添加,此代码使用多项式方法,需要将其更改为除法。

    private int myhash(Key key) 
        {
        int hash = 7;
        String k = (String) key; //here we assume keys are strings.
        int base=31;
        for (int i = 0; i < k.length(); i++)

                  hash=(int)Math.round(( Math.pow(31, k.length()-i-1 ))) * k.charAt(i) + hash;

        hash=Math.abs(hash) % m;
        return hash;
    }

1 个答案:

答案 0 :(得分:0)

不要假定Key是字符串,因为Java中没有类可以扩展String。也许地图应定义为

Map<String, String>

无需重新发明轮子,因为可以使用string.hashCode()函数调用哈希码。

该实现可以在下面找到,并且可以在JDK源代码中找到。

int h = 0;
if (string.length() > 0) 
    for (int i = 0; i < string.length(); i++) {
        h = 31 * h + string.charAt(i);
    }
}
return h;

您的代码似乎计算出另一种哈希值

要进行改进,您可以计算31的幂并将其存储在不同的变量中,并使用它代替昂贵的pow()