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

BKDRHash 算法java实现

2015-11-17 17:56 393 查看
背景:

BKDRHash算法是字符串hash算法。是一种简单快捷的hash算法。java的继承Object类的提供的hashCode()函数也是采用这种hash算法。下面使用100000个不同字符串产生的冲突数,大概在0~3波动,使用100百万不同的字符串,冲突数大概110+范围波动。

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class BKDRHash {
public static int seed = 31;

public static int getHashCode(String str){
int hash = 0;
for(int i = 0;i!= str.length();++i)
{
hash =  seed * hash + str.charAt(i);
}
return hash;
}

public static void main(String[] args) {
int length = 100000;
String str1="http://blog.csdn.net/bojie5744";
System.out.println("str1 :"+str1.hashCode()+" system");
System.out.println("str1 :"+getHashCode(str1)+" custom");

Map<String,String> map = new HashMap<String,String>();
for(int i=0;i!=length;++i){
String str = UUID.randomUUID().toString();
map.put(getHashCode(str)+"", str);
}
System.out.println("冲突数为: "+(length-map.size()));
}

}


10万和100万不同字符串结果如下2个图所示。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 java hashcode