您的位置:首页 > 编程语言 > Java开发

Java String中的hashCode函数 以BKDR Hash Function实现

2012-02-15 10:21 911 查看
String 类中的hash函数如下:

public int hashCode() {

int h = hash;

if (h == 0) {

int off = offset;

char val[] = value;

int len = count;

for (int i = 0; i < len; i++) {

h = 31*h + val[off++];

}

hash = h;

}

return h;

}

具体的计算公式是:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

上面的代码可见简洁和高效。JDK的源代码。

这个hash算法的名称叫:BKDR Hash Function

This hash function comes from Brian Kernighan and Dennis Ritchie's book "The C Programming Language". It is a simple hash function using a strange set of possible seeds which all constitute a pattern of 31....31...31 etc, it seems to be very similar to the
DJB hash function.

算法来自于Brian Kernighan and Dennis Ritchie合著的C语言编程一书。函数用一个特殊的种子集合构建哈希函数

该算法代码:

public long BKDRHash(String str)

{

long seed = 131; // 31 131 1313 13131 131313 etc..

long hash = 0;

for(int i = 0; i < str.length(); i++)

{

hash = (hash * seed) + str.charAt(i);

}

return hash;

}

/* End Of BKDR Hash Function */

参考路径:http://www.partow.net/programming/hashfunctions/index.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐