背景:
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个图所示。