簡體   English   中英

使哈希計算更快

[英]Make hash calculation faster

我在這里有此代碼,我需要對其進行修改。 它可以工作,但是由於“哈希”的計算方式很慢。 我需要通過不同地編寫計算來使其更快。 任何想法將不勝感激。 我現在必須補充一點,此代碼使用多項式方法,需要將其更改為除法。

    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;
    }

不要假定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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM