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
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
相关文章推荐
- leetcode 实现hash-function java solution
- java 实现 简易的base64(byte[]与String的相互转换)
- Java实现从IP和端口列表List<String>获取分离的IP和端口值
- 【策略】一致性Hash算法(Hash环)的java代码实现
- 一致性Hash Java实现版
- Persistent Ideal Hash Tries---一种Java实现
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- Java中实现String.padLeft和String.padRight的示例
- JAVA(Spring mvc)接口实现类 接收参数时出现 For input string: ""问题
- 自己实现Java_String里面的spilt方法,不能借助于string的任何的方法,类
- java中如何实现String转换为int double;以及double,int如何转换为String
- java的strim()方法的实现,ltrim(String str,String substr)和rtrim(String str,String substr)
- War-ftpd USER longString漏洞攻击之Java实现常见问题
- java本地方法调用(JNI)的参考代码----实现将String转换成char*,将char*转换成String.
- java string.split()函数的c/c++两种实现——strtok_r及string.find()
- java中switch 也是可以变相实现String的比较的
- Android和Java中String.substring的不同实现
- 利用java反射机制实现List<Map<String, Object>>转化为List<JavaBean>
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- java 实现将一个string保存到txt文档中