[英]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.